perl – exists和defined有什么区别?

前端之家收集整理的这篇文章主要介绍了perl – exists和defined有什么区别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有什么区别
if (defined $hash{$key}) { }

if (exists $hash{$key}) { }

我什么时候知道使用哪个?

解决方法

这在 definedexists的perldoc条目中有详细记录。下面是一个快速摘要

defined $ hash {key}告诉你是否定义给定键的值(即不是undef)。使用它来区分未定义的值和在布尔上下文中为false的值,例如0和”。

exists $ hash {key}告诉你%hash是否包含给定的键。使用它来区分未定义的值和不存在的值。

这是最容易看到一个例子。给定这个散列:

my %hash = (a => 1,b => 0,c => undef);

这里是检索,定义和存在的结果:

# key  value  defined  exists
a          1        1       1
b          0        1       1
c      undef        0       1
d      undef        0       0

在实践中,人们经常只写if($ hash {key}){…},因为(在很多通常情况下)只有真值有意义/可能。如果false值有效,那么必须在测试中添加defined()。 exists()的使用频率更低。最常见的情况是可能在使用哈希作为集合。例如

my %set = map { $_ => undef } 'a' .. 'z';

使用undef设置值有几个好处:

>它更准确地表示意图(只有键是有意义的,而不是值)。
>所有undef值共享单个分配(这会节省内存)。
> exists()测试稍快(因为Perl不必检索值,只确定有一个)。

它也有缺点,你必须使用exists()来检查集合成员身份,这需要更多的输入,如果你忘记它会做错的事情。

另一个存在的地方是有用的是在尝试检索值之前探测锁定的哈希值(这将触发异常)。

原文链接:https://www.f2er.com/Perl/173475.html

猜你在找的Perl相关文章