`@ $ array`和其他结构的含义

lis*_*tor 10 arrays scalar perl6 raku

我还在学习Perl 6.请原谅我的无知.我正在阅读Operators页面,我在表的开头发现了一些不熟悉的结构:

A   Level   Examples
N   Terms   42 3.14 "eek" qq["foo"] $x :!verbose @$array
Run Code Online (Sandbox Code Playgroud)

我重新读取类Array和类Scalar但我无法@$xyz在这些部分中找到构造.做什么:!@$意味着什么?有没有一个方便的地方收集和解释所有这些象征性的结构?

非常感谢你 !!

sml*_*mls 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)
Run Code Online (Sandbox Code Playgroud)

:!foo是一个简称:foo(False),即一个具有以下值的命名参数False:

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

do-something;            # True
do-something :verbose;   # True
do-something :!verbose;  # False
Run Code Online (Sandbox Code Playgroud)

当写入术语位置但不作为参数列表的参数时,它构造一个Pair对象:

say (:!verbose);        # verbose => False
Run Code Online (Sandbox Code Playgroud)