@$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