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

时间:2017-06-22 16:40:48

标签: arrays perl6 scalar raku

我还在学习Perl 6.请原谅我的无知。我正在阅读Operators page,我在桌子的开头找到了一些不熟悉的结构:

A   Level   Examples
N   Terms   42 3.14 "eek" qq["foo"] $x :!verbose @$array

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

非常感谢!!

2 个答案:

答案 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

可以直接搜索大多数运营商。这两种情况尤其不是单独的操作符,而是组合使用符号的情况。这些比较困难,但是文档每天都在改进。