Chinaunix

标题: ()[]的困惑 [打印本页]

作者: gaoquanlong    时间: 2008-09-05 15:17
标题: ()[]的困惑
谁能帮忙解释一下这句代码,Perl语言学习第三版中的"范围操作符",谢了
$hexdigit = (0 .. 9, 'a' .. 'f')[$num & 15];

#获得一个十六进制位

作者: churchmice    时间: 2008-09-05 15:53
你说说哪个地方不懂吧
都看到programming perl了,不会都不懂吧
作者: 爱知    时间: 2008-09-05 15:53
(0 .. 9, 'a' .. 'f') ---> a list

$num & 15  ---> an expression

[ 本帖最后由 爱知 于 2008-9-5 15:58 编辑 ]
作者: 爱知    时间: 2008-09-05 16:16
$num & 15 也可用 $num % 16
作者: gaoquanlong    时间: 2008-09-05 16:28
我明白 (0 .. 9, 'a' .. 'f') 这个是列表,我也明白里面的。。是范围操作符,
我不明白的是后面[$num & 15]  以及 ()[]   这两对括号放一起是什么意思,还有顺便想问一下&到底是怎么进行位运算

[ 本帖最后由 gaoquanlong 于 2008-9-5 23:11 编辑 ]
作者: 爱知    时间: 2008-09-05 17:23
标题: 回复 #5 gaoquanlong 的帖子
二进制位 与操作
作者: churchmice    时间: 2008-09-05 20:42
list slice
看小骆驼的Some advanced perl technique里面有讲
作者: flw    时间: 2008-09-05 21:11
注意上下文。
范围操作符在列表上下文返回一个列表。
(1..3) 的意思就是 (1, 2, 3)
作者: cobrawgl    时间: 2008-09-05 21:18
原帖由 gaoquanlong 于 2008-9-5 15:17 发表
谁能帮忙解释一下这句代码,Perl语言学习第三版中的"范围操作符",谢了
$hexdigit = (0 .. 9, 'a' .. 'f')[$num & 15];

#获得一个十六进制位



你这样来理解好了

my @hex_num = (0 .. 9, 'a' .. 'f');
my $index = $num & 15;
my $hexdigit = $hex_num[$index];
作者: ynchnluiti    时间: 2008-09-05 22:50
(0 .. 9, 'a' .. 'f') = (0, 1, 2, 3, 4, 5, ... , 9, 'a', 'b', ..., 'f')
作者: gaoquanlong    时间: 2008-09-05 23:20
原帖由 cobrawgl 于 2008-9-5 21:18 发表



你这样来理解好了

my @hex_num = (0 .. 9, 'a' .. 'f');
my $index = $num & 15;
my $hexdigit = $hex_num[$index];


你这样解释我非常明白;
难道 my $hexdigit = $hex_num[$index];里面的$hex_num,就是my @hex_num = (0 .. 9, 'a' .. 'f');的@hex_num 的代替??
作者: Osment    时间: 2008-09-05 23:55
$name[id] 就是 @name 中的第 id 个变量。 很久不写Perl,貌似这种方式叫“切片”?
作者: sheenshine    时间: 2008-09-08 16:36
难道是匿名数组的表达?
作者: cscscheng    时间: 2008-09-09 18:10
原帖由 爱知 于 2008-9-5 16:16 发表
$num & 15 也可用 $num % 16


效率上考虑好像位操作要高多了吧..
嘿嘿.




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