Chinaunix

标题: 关于Perl的hash的exists函数的用途 [打印本页]

作者: no47wk    时间: 2013-10-04 21:13
标题: 关于Perl的hash的exists函数的用途
本帖最后由 no47wk 于 2013-10-04 21:13 编辑

要判断一个元素是否存在,我可以直接用if($hash{some}),为什么还要多加一个exists函数呢?
  1. #!/usr/bin/perl
  2. use strict;
  3. use utf8;
  4. use autodie;
  5. use warnings;
  6. use 5.010;
  7. my %a = (a => 1);
  8. if($a{b}){
  9.         say 'yes';
  10. }
  11. if(exists $a{b}){
  12.         say 'yes';
  13. }
复制代码
这两个判断的输出没有任何不同,很费解为何要有一个exists函数
作者: iamlimeng    时间: 2013-10-04 21:55
本帖最后由 iamlimeng 于 2013-10-04 21:57 编辑

$hash{some} = '';
你再试试!
作者: no47wk    时间: 2013-10-04 22:06
回复 2# iamlimeng

thx
exists主要存在的目的就是万一有某个key对应的value是undef

   
作者: 104359176    时间: 2013-10-05 18:45
回复 3# no47wk

你再试试 $hash->{$key} = undef;

   
作者: 104359176    时间: 2013-10-05 18:50
回复 4# 104359176

还是别折腾你了。

一个不存在的键值和一个存在的键值的判断,要用 exists
通过值判断真假,不能判断是否存在。因为在 Perl 中,假的定义包括:

0 空字符串

而一个不存在的东西,叫 undef。 如果进行布尔逻辑判断,是要报错的。

所以,对一个哈希键值的判断,稳健的方式是先进性存在性判断,然后进行值的比较。


   
作者: no47wk    时间: 2013-10-06 11:04
回复 5# 104359176

多谢您的回复,我理解了exists函数存在的意义了

   
作者: pitonas    时间: 2013-10-08 13:24
5楼!强!
好多用法见都没见过
作者: zyx6a    时间: 2013-10-08 15:39
菜鸟学习了。。
作者: Okelani    时间: 2013-10-08 22:11
菜鸟学习了。理解了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2