perl – exists和defined有什么区别?
有什么区别
if (defined $hash{$key}) { } 和 if (exists $hash{$key}) { } 我什么时候知道使用哪个? 解决方法
这在
defined 和
exists 的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设置值有几个好处: >它更准确地表示意图(只有键是有意义的,而不是值)。 它也有缺点,你必须使用exists()来检查集合成员身份,这需要更多的输入,如果你忘记它会做错的事情。 另一个存在的地方是有用的是在尝试检索值之前探测锁定的哈希值(这将触发异常)。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |