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 显示 List
个 Int
呢?而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
.
当我在 Perl6 REPL 中执行以下语句时:
my $var = 1, 2, 3;
它打印:
(1 2 3)
这让我感到好奇,因为 $var
实际上被分配了一个整数(即 $var.WHAT
returns (Int)
),而不是 List
Int
秒。
我认为分配Int
的原因是项目分配运算符(=
)相对于逗号运算符(,
)具有更高的优先级,这将 ,2,3
留在接收器上下文中。但是为什么 REPL 显示 List
个 Int
呢?而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
.