`@$array` 和其他构造的含义

Meaning of `@$array` and other constructs

我还在学习Perl 6,请原谅我的无知。我正在阅读 Operators page,我在 table:

的开头发现了一些不熟悉的结构
A   Level   Examples
N   Terms   42 3.14 "eek" qq["foo"] $x :!verbose @$array

我重新阅读了 class 数组和 class 标量,但我无法在这些部分中找到 @$xyz 构造。 :!@$ 是什么意思?是否有一个方便的地方可以收集和解释所有这些符号结构?

非常感谢!!

使用 :verbose 参数是将 Bool 参数设置为带有 colon pairTrue 的好方法。相当于:verbose(True):!verbose只是那个的否定,设置为False,相当于:verbose(False).

@$ 是一种使用 @ 前缀从带有印记 $.

的标量变量中删除 container 的方法

考虑:

my $x = (1, 2, 3);
.say for $x; 

输出:

(1 2 3)

对比

my $x = (1, 2, 3);
.say for @$x; 

输出:

1
2
3

大部分运营商都可以直接搜索到。特别是这两种情况,不是单独的运算符,而是组合使用符号的情况。那些有点难收集方便,但文档每天都在改进。

@$foo@($foo) 的缩写,其中 $foo 是一个项目变量, @(...) 语法只是调用.list method on its argument. Both the method and the syntactic form are sometimes called the "list/array contextualizer".

它的一个用途是当您想要遍历存储在项目容器中的数组时。项目容器被内置函数视为单个项目,例如 for 循环,而在其上调用 .list returns 没有周围项目容器的普通数组(即“强制值在列表上下文中解释"):

my $foo = [1, 2, 3];

say $foo.perl;       # $[1, 2, 3]
say $foo.list.perl;  # [1, 2, 3]
say @$foo.perl;      # [1, 2, 3]

for $foo { ... }       # One iteration
for $foo.list { ... }  # Three iterations
for @$foo { ... }      # Three iterations (identical to the previous line)

:!foo:foo(False) 的缩写,即 named argument 的值为 False:

sub do-something (:$verbose = True) { say $verbose; }

do-something;            # True
do-something :verbose;   # True
do-something :!verbose;  # False

当写在术语位置但不作为参数列表的参数时,它构造一个 Pair 对象:

say (:!verbose);        # verbose => False