当我在Perl6 REPL中执行以下语句时:
componentWillReceiveProps
它打印:
my $var = 1, 2, 3;
这对我来说很好奇,因为实际上为(1 2 3)
分配了一个整数(即$var
返回$var.WHAT
),而不是(Int)
中的List
s。
我认为分配Int
的原因是项目分配运算符(Int
)相对于逗号运算符(=
)较高的优先级,这使得,
在接收器上下文中。但是,为什么REPL显示,2,3
中的List
?在执行语句后,REPL通常显示什么?
答案 0 :(得分:15)
REPL基本上执行say (my $var = 1,2,3)
。由于该表达式的结果 是List
,因此它将显示为(1 2 3)
。在该表达式内部,仅将该列表的第一个元素分配给$a
,因此它是一个Int
。
那么为什么不警告呢?正如您所指出的那样:
$ perl6 -e 'my $a = 1,2,3'
WARNINGS for -e:
Useless use of constant integer 2 in sink context (lines 1, 1)
Useless use of constant integer 3 in sink context (lines 1, 1)
而事实并非如此:
$ perl6 -e 'say (my $a = 1,2,3)'
(1 2 3)
原因很简单:由于say
,,2,3
不再处于接收器上下文中,因为say
正在使用它们 。