免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5360 | 回复: 22
打印 上一主题 下一主题

请教 赋值语句的值 问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-27 12:28 |只看该作者 |倒序浏览
在小骆驼书中有段代码:

while (($key, $value) = each %hash){
print “$key => $value\n”;
}
当Perl 执行each %hash ,最后由于没有key/value 对,因此返回空列表。空列表赋给($key, $value),$key
得到undef, $value 仍然为undef

我的疑惑:
此时列表为(undef,undef) ,列表在一个标量context 中将返回其元素的个数.我觉得此时应该是2.但书上是0.

请老大们解惑! 谢谢!

[ 本帖最后由 linuxty 于 2009-7-27 15:05 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-07-27 12:42 |只看该作者
喔  晕了   是不是这样解释的 ?
赋值语句的值是赋值操作符右边的值
所以 $n=($key,$value)=()  即 $n=()

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
3 [报告]
发表于 2009-07-27 12:52 |只看该作者
原帖由 linuxty 于 2009-7-27 12:42 发表
喔  晕了   是不是这样解释的 ?
赋值语句的值是赋值操作符右边的值
所以 $n=($key,$value)=()  即 $n=()

是的。

论坛徽章:
0
4 [报告]
发表于 2009-07-27 12:53 |只看该作者

回复 #1 linuxty 的帖子

不好意思,开始的有点错误。看一下这个英文原文
When the hash is entirely read, a null array is returned in list context (which when assigned produces a false (0 ) value), and undef in scalar context.

[ 本帖最后由 Perl_Er 于 2009-7-27 14:51 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-07-27 14:09 |只看该作者
原帖由 MMMIX 于 2009-7-27 12:52 发表

是的。

谢谢 !

请问老大下面程序又应该怎么解释也 输出为 2
perl -e'@a=($x,$y)=();print scalar @a'  

如果按照上面说的应该为0 啊   ?

越来越晕了...  老大不要笑我  ..

论坛徽章:
0
6 [报告]
发表于 2009-07-27 14:26 |只看该作者
原帖由 Perl_Er 于 2009-7-27 12:53 发表
当整个hash读完了的时候,返回一个null array,标量环境下也就是0. 这个时候就是while判断hash读完了的时候。如果是返回2的话,说明hash还没有读完.


谢谢你的回答 !
我想问的是返回的null array赋值给了 ($key,$value), 此时就变成 (undef,undef), 这个的标量环境就是2了.

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2009-07-27 15:05 |只看该作者
原帖由 linuxty 于 2009-7-27 14:09 发表

谢谢 !

请问老大下面程序又应该怎么解释也 输出为 2
perl -e'@a=($x,$y)=();print scalar @a'  

如果按照上面说的应该为0 啊   ?

可你在上面用的是 $n 而不是 @a

论坛徽章:
0
8 [报告]
发表于 2009-07-27 15:15 |只看该作者
原帖由 MMMIX 于 2009-7-27 15:05 发表

可你在上面用的是 $n 而不是 @a



其实我就是想问问赋值语句的值是什么?
呵呵 不要意思 问题问的不好.


$n=( ($key,$value)=() )  这一种是把 () 赋值给 $n , 赋值语句的值为()
@n=( ($key,$value)=() )  这一种是把 (undef,undef) 赋值给 @n , 赋值语句的值为(undef,undef)

都是赋值语句,为什么会有这种差异也.

请老大指点不对的地方  谢谢

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
9 [报告]
发表于 2009-07-27 15:20 |只看该作者
原帖由 linuxty 于 2009-7-27 15:15 发表



其实我就是想问问赋值语句的值是什么?

依赖于 context

$n=( ($key,$value)=() )  这一种是把 () 赋值给 $n , 赋值语句的值为()
@n=( ($key,$value)=() )  这一种是把 (undef,undef) 赋值给 @n , 赋值语句的值为(undef,undef)

都是赋值语句,为什么会有这种差异也.

在 perldata 中搜索 List assignment,讲的很详细。

论坛徽章:
0
10 [报告]
发表于 2009-07-27 15:21 |只看该作者
原帖由 MMMIX 于 2009-7-27 15:20 发表

依赖于 context


在 perldata 中搜索 List assignment,讲的很详细。




好的  谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP