我仍在学习 Perl 6。我正在阅读 Operators 页面,我在表的开头发现了一些不熟悉的结构:
A Level Examples
N Terms 42 3.14 "eek" qq["foo"] $x :!verbose @$array
我重新阅读了 Array 类和 Scalar 类,但我无法在这些部分中找到
@$xyz
构造。 :!
和 @$
是什么意思?有没有一个方便的地方可以收集和解释所有这些符号结构?
@$foo
是 @($foo)
的缩写,其中 $foo
是一个项目变量,而 @(...)
语法只是在其参数上调用 .list
方法。该方法和语法形式有时被称为 “列表/数组上下文化器”。
它的一个用途是当您想要迭代存储在项目容器中的数组时。项目容器被内置项(例如
for
循环)视为单个项目,而在其上调用 .list
将返回没有周围项目容器的普通数组(即“强制在列表上下文中解释值”):
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
当写入术语位置但不作为参数列表的参数时,它构造一个 Pair 对象:
say (:!verbose); # verbose => False
使用
:verbose
参数是将 Bool
参数设置为带有 冒号对的
True
的好方法。相当于: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
大部分运营商都可以直接搜索。特别是这两种情况不是单独的运算符,而是组合使用符号的情况。这些有点难以方便地收集,但文档每天都在改进。