变量的条件初始化/定义
问题描述:
仅当参数为假时才可以定义变量吗?
我有类似:变量的条件初始化/定义
my $object = Class::create($args);
for my $i (@input) {
if ($test) {
# print some info here
next;
}
#use of $object here
}
如果我做这样的事情:
my $object = Class::create($args) unless ($test);
是用于初始化一个正确的做法?
答
该语法是...... fraught with peril。
my $object = $test ? undef : Class::create($args);
my $object;
$object = Class::create($args) unless $test;
是更安全的替代方案。
'my $ object =!$ test && Class :: create($ args);' –
@Сухой27:老实说,很难理解到底发生了什么(至少对我来说) – Jim
@Jim'在Perl中&&'(和'和')短路_并返回value_(不是真/假)。所以如果'!$ test'返回一个falsey值(代码中的标准),那么语句的其余部分就不会被评估,并且'!$ test'的返回被赋值给'$ object'(推测为'undef', emtpy字符串等 - 取决于你的'$ test'是如何设计的)。但是,如果'!$ test'返回一个真值,那么剩下的就是。这从你的例子中正确地实现了6行。请注意,怪物的答案具有将'$ object'专门设置为'undef'(并且不依赖于'!$ test'返回)的优点。 – zdim