我偶然遇到了一段具有以下语法的Perl代码。
sub new{
my ($class, $value)=@_;
$lobby ||= bless{
e=>undef;},$class
}
语法||=
是什么意思?
我尝试使用关键词在谷歌中搜索,但未能找到类似的语法。在perldoc中也没有找到相关内容。
我偶然遇到了一段具有以下语法的Perl代码。
sub new{
my ($class, $value)=@_;
$lobby ||= bless{
e=>undef;},$class
}
语法||=
是什么意思?
我尝试使用关键词在谷歌中搜索,但未能找到类似的语法。在perldoc中也没有找到相关内容。
$lhs ||= $rhs
相当于 $lhs = $lhs || $rhs
。这意味着如果$lhs
在Perlish意义下为假,那么$rhs
将被赋值给$lhs
。这可能是因为$lhs
是undef
,或者是一个空字符串,或者是一个值为0的数字。undef
、numeric zero
和 empty string
。都很好,我只想添加 "0"
和 empty list
。 - gaussblurinc()
),那么同时提到它和undef
就像提到0
和0+0
一样多余。 - ikegamiEXPR1 ||= EXPR2;
等同于
EXPR1 = EXPR1 || EXPR2;
除非EXPR1
只被评估一次。这是设置默认值的便捷方式。例如:
sub foo {
my %args = @_;
$args{host} ||= "localhost"; # Provide a default host name if none provided.
...
}
new
时,它将创建一个新对象。在后续调用中,它将返回先前创建的对象。为了完善这个问题,在非古老版本的Perl中(自5.10以来),您可以使用定义或运算符//
代替真值或||
,当将其用于设置默认值时,它具有更好的语义:
$foo ||= 42; # $foo = $foo || 42;
$foo
为假值时,此操作符将该变量的值设置为42。问题在于,这个操作符无法区分已定义但为假值和未定义的情况,因为两者都被视为假值。$foo //= 42; # $foo = $foo // 42;
这行代码设置了$foo
的值,只有在之前它没有定义的情况下才会设置,这通常是我们想要的。它也像||
一样短路。
$x ||= $y;
与
相同$x = $x || $y;