Perl6 REPL打印行为

6
当我在Perl6 REPL中执行以下语句:
my $var = 1, 2, 3;

它会打印出:

(1 2 3)

我觉得这很奇怪,因为$var实际上被赋予了一个单整数值(即$var.WHAT返回(Int)),而不是一个包含整数的List

我想这是因为项目赋值运算符(=)的优先级比逗号运算符(,)高,所以,2,3处于sink上下文。但是为什么REPL会显示一个List of Int?REPL通常在语句执行后显示什么?

1个回答

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使用。

2
非常好;原本看起来不对劲的事情突然变得完全合理 :-) - ozzy
2
这就是为什么使用 perl6 -e 进行测试通常比 REPL 更好的原因。 - Scimon Proctor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接