Perl6 REPL 打印行为

Perl6 REPL print behaviour

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

my $var = 1, 2, 3;

它打印:

(1 2 3)

这让我感到好奇,因为 $var 实际上被分配了一个整数(即 $var.WHAT returns (Int)),而不是 List Int 秒。

我认为分配Int的原因是项目分配运算符(=)相对于逗号运算符(,)具有更高的优先级,这将 ,2,3 留在接收器上下文中。但是为什么 REPL 显示 ListInt 呢?而REPL在一条语句执行后一般会显示什么?

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.