@$array

@$array 的意思

我仍然在学 Perl 6, 请原谅我的无知。我有点不明白下面的结构:

A   Level   Examples
N   Terms   42 3.14 "eek" qq["foo"] $x :!verbose @$array

请问 :!@$ 的意思是什么?

@$foo@($foo) 的简写, 其中 $foo 是 item 变量而 @(...) 语法就是在它的参数身上调用 .list 方法。这两种方式有时候都叫做列表/数组上下文。

@$(...) 的使用场景之一就是迭代一个存储在 item 容器中的数组。item 容器被认为是单个条目, 而在 item 容器上调用 .list 方法会返回一个普通的数组, 其周围的 item 容器会被移除(例如,强制值在列表上下文中解释):

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) 的简写,举个例子,具名参数拥有 False 值:

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

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

当写在 item 位置上而非作为参数列表中的参数时,它构建了一个 Pair 对象:

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

使用 :verbose 参数是一个使用冒号对儿把 Bool 参数设置为 True 的好方法。:!verbose 是它的反面, 即把 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

你可能感兴趣的:(@$array)