Perl6 REPL打印行为

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)),而不是一个ListInt秒.

我认为Int分配a 的原因是项目赋值operator(=)相对于逗号运算符(,)的优先级更高,它留下了,2,3in sink上下文.但是,为什么在REPL显示ListIntS' 在执行语句后,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.

  • 非常好; 突然出现的东西完全有道理:-) (2认同)
  • 这就是为什么`perl6 -e`经常可以比REPL更好地进行测试的原因。 (2认同)