ozz*_*zzy 6 variable-assignment perl6 read-eval-print-loop
当我在Perl6 REPL中执行以下语句时:
my $var = 1, 2, 3;
Run Code Online (Sandbox Code Playgroud)
它打印:
(1 2 3)
Run Code Online (Sandbox Code Playgroud)
这似乎好奇的我,因为$var
实际上被分配一个整数(即$var.WHAT
回报(Int)
),而不是一个List
的Int
秒.
我认为Int
分配a 的原因是项目赋值operator(=
)相对于逗号运算符(,
)的优先级更高,它留下了,2,3
in sink上下文.但是,为什么在REPL显示List
的Int
S' 在执行语句后,REPL通常会显示什么?
Eli*_*sen 15
REPL基本上做了一个say (my $var = 1,2,3)
.因为该表达式的结果是 a 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)
Run Code Online (Sandbox Code Playgroud)
而这不是:
$ perl6 -e 'say (my $a = 1,2,3)'
(1 2 3)
Run Code Online (Sandbox Code Playgroud)
其理由很简单:因为say
,则,2,3
不再在水槽上下文,因为它们被正在使用的say
.