Perl6 REPL打印行为

时间:2019-02-27 08:36:41

标签: variable-assignment read-eval-print-loop perl6

当我在Perl6 REPL中执行以下语句时:

componentWillReceiveProps

它打印:

my $var = 1, 2, 3;

这对我来说很好奇,因为实际上为(1 2 3) 分配了一个整数(即$var返回$var.WHAT),而不是(Int)中的List s。

我认为分配Int的原因是项目分配运算符(Int)相对于逗号运算符(=)较高的优先级,这使得,在接收器上下文中。但是,为什么REPL显示,2,3中的List?在执行语句后,REPL通常显示什么?

1 个答案:

答案 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正在使用它们