raku - 如何将项目上下文数组分配给位置?

标签 raku rakudo

在 Rakudo Perl 6 中,item$ 可用于计算项目上下文中的表达式。参见 https://docs.perl6.org/routine/item

我正在使用一个返回项目上下文数组的库。删除上下文化以便将其分配给 @ 变量的正确方法是什么?

例如:

my @a = $[<a b c>];
dd @a; # Outputs: Array @a = [["a", "b", "c"],]

最佳答案

Perl 就是 Perl,实现它的方法不止一种,例如

dd my @ = @$[<a b c>];     # via original array, equivalent to .list
dd my @ = $[<a b c>][];    # via original array, using zen slicing
dd my @ = |$[<a b c>];     # via intermediate Slip, equivalent to .Slip
dd my @ = $[<a b c>].flat; # via intermediate flattening Seq

最明确的解决方案可能是通过 @.list 强制执行列表上下文,我会避免 .flat 调用,因为它具有略微不同的语义内涵。

请注意,列表赋值是复制,但如果您使用的方法之一只是从其标量容器中提取原始数组,您也可以使用绑定(bind)。但是,在那种情况下,您甚至不需要手动解除容器化,因为

dd my @ := $[<a b c>];

还可以将数组作为 list-y 返回。

关于raku - 如何将项目上下文数组分配给位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45511595/

相关文章:

immutability - 带有类型约束的无符号 "variables"是否可以重新绑定(bind)?

raku - 为什么源文件名不是人类可读的?

raku - Perl 6 中交替出现的文字正则表达式中的重复元素

module - 在模块(分发?)级别强制执行 API 边界

metaprogramming - 您如何从它们所属的类型之外访问私有(private)方法或属性?

scripting - 在哪里可以找到Perl 6的演示/示例代码?

unicode - 如何使用 NCurses 打印 Unicode?

printing - Perl6 Terminal::Print 如何提示用户输入文本?

raku - 数组在循环通过 `for` 时保持数组

raku - Perl 6 是否与 Python 的字典更新方法等效?