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

问题描述 投票:0回答:2

我仍在学习 Perl 6。我正在阅读 Operators 页面,我在表的开头发现了一些不熟悉的结构:

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

我重新阅读了 Array 类和 Scalar 类,但我无法在这些部分中找到

@$xyz
构造。
:!
@$
是什么意思?有没有一个方便的地方可以收集和解释所有这些符号结构?

arrays raku scalar
2个回答
11
投票

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

4
投票

使用

: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

大部分运营商都可以直接搜索。特别是这两种情况不是单独的运算符,而是组合使用符号的情况。这些有点难以方便地收集,但文档每天都在改进。

© www.soinside.com 2019 - 2024. All rights reserved.