【问题标题】:Using Conditional Operators inside push in Perl在 Perl 的 push 中使用条件运算符
【发布时间】:2021-08-26 09:57:04
【问题描述】:

我是 Perl 开发的新手,我想检查是否允许在 push 语句中使用条件运算符。 像这样的

push(@myMap, {
    key1 => value1,
    key2 => value2,
    (condition)?{
        key3 => value3,
    }:(),
    key4 => value4
});

基本上我只想根据条件向 Map 添加一个值

【问题讨论】:

  • 最简单的找出方法是运行代码。
  • 你不必在一个语句中做所有事情。您可以稍后添加哈希键/值,例如$myMap[0]{key3} = "value3" if condition.

标签: perl conditional-operator


【解决方案1】:

是的,但你的代码是错误的。

push(@myMap, {
    key1 => value1,
    key2 => value2,

    (condition) ? 
      {                   ### these brackets are wrong
        key3 => value3,
      }                   ###
   :(),

    key4 => value4
});

如果条件为真,则您正在创建一个包含奇数个元素的数据结构。它将包含一个哈希引用作为值之一,因此您不再有键/值对,它可能会抱怨。

它会尝试做你想做的事,基本上将哈希引用转换为其字符串表示,然后使用key4 作为值,留下value4undef 作为最后一对。

修复:

push(@myMap, {
    key1 => value1,
    key2 => value2,
    (condition) ? ( key3 => value3 ) : (),
    key4 => value4
});

【讨论】:

  • 企业运营商不能这样吗:(key3 => value3) x !!(condition) ?
  • @jo-37 可以,但不完全可读。
  • @simbabque,我不是它的忠实粉丝,但它是一个众所周知的成语。如果可以识别模式,这使得它事实上可读,而且这个模式很容易识别。如果我在grepif 附近看到!$seen{$_}++,就好像我立即知道我们正在做一些重复的事情。这不是因为我花时间解析表达式;这是一种熟悉的模式。
猜你喜欢
  • 2012-02-22
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 2017-11-09
  • 1970-01-01
相关资源
最近更新 更多