perl - 为什么可以在 boolean 上下文中评估 `defined $x && $x`?

标签 perl operators boolean

my $target_type = (defined($item->{target_type}) && $item->{target_type}) 
                ? $item->{target_type} 
                : "";

my $target_id   = (defined($item->{target_id}) && $item->{target_id})
                ? $item->{target_id} 
                : "";

开发者为什么用&&在几乎相同的条件下?

最佳答案

显然他是腰带和吊带类型。 (defined($x) && $x) 几乎等于 $x ,因为 undef 是假的。 (不同之处在于,如果 $xundef,那么 (defined($x) && $x) 将是 Perl 的特殊假值,它是定义的,但在这种情况下没有区别。)可能曾经有一个不同的条件(例如 $x > 0 需要 x145)以避免有关未初始化值的警告。然后有人删除了该条件,并没有想到删除现在不必要的 defined

使用 defined (如 onon15 points out )的另一个原因是向 future 的维护程序员强调 (defined($x) && $x) 可能未定义。就个人而言,我会为此使用评论,但 TIMTOWTDI

关于perl - 为什么可以在 boolean 上下文中评估 `defined $x && $x`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12419036/

相关文章:

c++ - 这个return语句有什么意义吗?

xml - 在 Perl 中构建 XML 文件 : Relationship between createAttribute and addChild

linux - 在 Linux 中,如何让我的 Perl 脚本像二进制文件一样运行?

python - 从字符串中删除数值

perl - 如何从 Perl 脚本中运行 Perl 脚本?

c++ - 创建自定义运算符 c++

与前置和后置增量运算符混淆

perl - 为什么 !1 在 Perl 中没有给我任何结果?

c - 如何评估c中的双指针?

java按位运算符和相等字符;复合运算符