数组切片中的多个组件 - 相当于 perl5:@a[0..1,3]

Multiple components in an array slice - equivalent to perl5: @a[0..1,3]

非常基本的问题,但我似乎无法在文档中找到有关多个范围的任何信息。

如何从一个 perl6 数组中 select 多个范围?

my @a = "a","b","c","d";

@a[0..1,3] # expecting array with a, b & d as p5

这似乎是 return 一种嵌套列表,Perl 6 语法是什么来实现在 Perl 5 中会产生的结果(即具有 ab 的数组) & d)?

你的问题有点令人困惑,但假设你有错别字之类的,我会试着猜猜你在问什么。

这构成了一个简单的数组:

> my @a = "a", "b', "c", "d";
[a b c d]

这使得 Range 来自 0..1 和 3:

的匿名数组
> @[0..1,3];
[0..1 3]

如果你想让它从@a数组中提取值,你必须引用它:

> @a[0..1,3];
((a b) d)

@a 中提取你要求的位——第一个元素是 @a(a,b)0..1 部分——(不确定你为什么要在这里看到 c..)

这是嵌套列表 -- 您要求的两位包括第一个字段中的列表,以及您在第二个字段中要求的值 d

如果你想让它展平而不是嵌套,你可以使用.flat:

> @a[0..1,3].flat;
(a b d)

在 Raku(以前称为 Perl 6)中,0..1 产生单个项目,这是一个范围。在 Perl 5 中,0..1 立即扩展为两个数字。

我在 Raku 中最常犯的错误之一就是忘记把东西弄平。好处是在 Raku 中,我们基本上免费获得了相当于 Perl 5 的引用,这消除了很多混乱的引用和解引用。