【问题标题】:What is the meaning of operator ||=运算符||=是什么意思
【发布时间】:2020-07-06 21:50:00
【问题描述】:

在Perl中,下面例子中的||=是什么意思?

$sheet -> {MaxCol} ||= $sheet -> {MinCol};

【问题讨论】:

标签: perl operators


【解决方案1】:

a ||= b 类似于a = a || b,所以:

$sheet->{MaxCol} ||= $sheet->{MinCol};

类似于:

$sheet->{MaxCol} = $sheet->{MaxCol} || $sheet->{MinCol};

根据 ikegami 的评论,不同之处在于 a ||= b; 只计算一次 a,并且在 b 之前计算 a。当a 具有魔力或不是标量时,这一点很重要。

【讨论】:

    【解决方案2】:
    $sheet -> {MaxCol} ||= $sheet -> {MinCol};
    

    效果和

    一样
    if (!$sheet->{MaxCol}) { $sheet->{MaxCol} = $sheet->{MinCol}; }
    

    $sheet->{MaxCol} = $sheet->{MinCol} unless $sheet->{MaxCol};
    

    【讨论】:

      【解决方案3】:

      正如其他答案所说:这是 Perl 提供的速记之一。

      $a += $b几乎$a = $a + $b相同。

      为什么几乎?好吧,对 $a 的访问次数可能会导致不同的副作用。例如,如果 $a 实际上是一个绑定变量。绑定一个变量/哈希/数组/文件句柄可以让你挂钩读取和写入存储(无论是 Perl 占用的 RAM 还是某处的数据库文件或对传感器(温度、湿度等)的简单访问)

      有关更多信息,请参阅 perldoc -f tie。

      您可能已经可以想象,这可以非常强大,与 Unix 的“一切都是文件”通过一个非常统一和通用的接口访问各种设备不同......

      Perl 中还有其他的简写方式:

      • $a **= $b(如 $a 是 $a 的 $b 次方),
      • +=-=*//= --- 就像它在锡罐上所说的那样,
      • %= 取模
      • $a x= $b,将字符串重复 $a 到 $b 次
      • &=, |=, ^=,按位与,或,异或
      • &.=|.=^.=、相同的 &= 等,但操作数强制被解释为字符串
      • <<=>>= 用于按位移位
      • $a &&= $b 是“如果 $a 评估为真,则将其设置为 $b”。
      • ||= 是“如果 $a 的计算结果为 false(空字符串、值为零或未定义),则将 $a 设置为 $b。如果 0 或空字符串不能作为有效输入,这是设置默认值的好方法。
      • 我最喜欢的\\=||= 几乎相同,只是它不会将 $a 设置为 $b,即使 $a 为 0 或空字符串。

      【讨论】:

        猜你喜欢
        • 2013-05-07
        • 2015-09-18
        • 2017-03-29
        • 2011-03-16
        • 2011-07-09
        • 2016-07-23
        • 1970-01-01
        相关资源
        最近更新 更多