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