我还在学习Perl 6.请原谅我的无知。我正在阅读Operators page,我在桌子的开头找到了一些不熟悉的结构:
A Level Examples
N Terms 42 3.14 "eek" qq["foo"] $x :!verbose @$array
我重新读取类Array和类Scalar,但我无法在这些部分中找到@$xyz
构造。 :!
和@$
的含义是什么?有没有一个方便的地方收集和解释所有这些象征性的结构?
非常感谢!!
答案 0 :(得分:9)
@$foo
是@($foo)
的缩写,其中$foo
是项目变量,@(...)
语法只调用.list
论证的方法。方法和句法形式有时被称为“列表/数组语境化”,但我无法找到官方Perl 6文档中语法形式的文档。
它的一个用途是,当您想要迭代存储在项容器中的数组时。项目容器被内置函数(例如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)
的缩写,即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
答案 1 :(得分:3)
使用:verbose
参数是将Bool
参数设置为True
colon pair的好方法。它相当于:verbose(True)
。 :!verbose
只是否定了这一点,将其设置为False
,相当于:verbose(False)
。
@$
是一种使用@
前缀从带有sigil $
的标量变量中删除container的方法。
考虑:
my $x = (1, 2, 3);
.say for $x;
输出:
(1 2 3)
VS。
my $x = (1, 2, 3);
.say for @$x;
输出:
1
2
3
可以直接搜索大多数运营商。这两种情况尤其不是单独的操作符,而是组合使用符号的情况。这些比较困难,但是文档每天都在改进。