我碰巧遇到了一个perl代码,语法如下。Perl中的表示法 - || =运算符是做什么的?
sub new{
my ($class, $value)[email protected]_;
$lobby ||= bless{
e=>undef;},$class
}
语法||=
是什么意思?
我没有把它作为一个关键词,我在perldoc中找不到类似的语法。
我碰巧遇到了一个perl代码,语法如下。Perl中的表示法 - || =运算符是做什么的?
sub new{
my ($class, $value)[email protected]_;
$lobby ||= bless{
e=>undef;},$class
}
语法||=
是什么意思?
我没有把它作为一个关键词,我在perldoc中找不到类似的语法。
您会在perlop中找到运算符的含义。
现在它做什么:$lhs ||= $rhs
相当于$lhs = $lhs || $rhs
。这意味着如果$lhs
在Perlish意义上为false,则$rhs
被分配给$lhs
。这可能是如果$lhs
是undef
,如果它是一个空字符串,这个数字是0
从更广泛的意义上讲,|| =在第一次调用new时,似乎会初始化一个单例。 – ysth
@MortizBunkus它是好的,但它似乎真的Perlish错误。你说过关于'undef'和'numeric zero'和'empty string'。所有的好,我只是想添加“0”和“空列表”。 – gaussblurinc
@loldop,空列表永远不会是错误的。或者是真的。评估空列表的真实性是不可能的。那么,假设你指的是一个列表值。如果你指的是存根操作符('()'),那么提及它和'undef'与提及'0'和'0 + 0'一样多余 – ikegami
x ||= y
是短期的x = x || y
EXPR1 ||= EXPR2;
相同
EXPR1 = EXPR1 || EXPR2;
EXPR1
除外只计算一次。这是设置默认值的一种便捷方式。例如:
sub foo {
my %args = @_;
$args{host} ||= "localhost"; # Provide a default host name if none provided.
...
}
就你而言,你似乎有一个单例构造函数。第一次调用new
时,它会创建一个新对象。在后续调用中,它将返回以前创建的对象。
$x ||= $y;
是相同
$x = $x || $y;
只是为了完成这一点,在非古代版本的Perl (自5.10),您可以使用定义,或运营商//
,而不是真或||
,用它设置默认值时具有更好的语义:
$foo ||= 42; # $foo = $foo || 42;
例如设置此变量的值,以42 当且仅当$foo
处于Perlish的感假。问题是,这个操作符不能区分undefined值中的定义但是错误的值,因为两者都是错误的。
$foo //= 42; # $foo = $foo // 42;
该行设置$foo
价值当且仅当这是以前没有定义,这就是我们经常想。它也很短,完全像||
。
谷歌对随机Perl查询通常不是很有帮助(主要是因为在网上有很多关于Perl的坏消息)。您最好使用Perl文档网页(http://perldoc.perl.org/)或Perl搜索引擎(http://perlhacks.com/search/)。 –
这也是标点很难在Google搜索的事实! – plusplus