加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – exists和defined有什么区别?

发布时间:2020-12-15 21:27:48 所属栏目:大数据 来源:网络整理
导读:有什么区别 if (defined $hash{$key}) { } 和 if (exists $hash{$key}) { } 我什么时候知道使用哪个? 解决方法 这在 defined 和 exists 的perldoc条目中有详细记录。下面是一个快速摘要: defined $ hash {key}告诉你是否定义给定键的值(即不是undef)。使用
有什么区别
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()来检查集合成员身份,这需要更多的输入,如果你忘记它会做错的事情。

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读