Perl6中如何用单行代码实现Perl5多范围一维数组效果?
解决Perl 6中拼接范围生成一维数组的问题
嘿,我完全懂你的困惑!Perl 6里Range的行为和Perl 5确实不一样——你直接用逗号把两个范围丢进数组,Perl 6会把每个Range当成一个独立的数组元素,结果自然就变成二维数组了。不用append的话,有两种简洁的单行写法能实现Perl 5的效果:
方法1:用展开操作符|
my @cols = |(3..9), |(11..16); use Data::Printer:from<Perl5>; p @cols;
|操作符的作用就是把Range里的元素逐个“展开”到数组中,而不是把整个Range作为单个元素存进去,这样就得到了一维的元素列表。
方法2:用flat函数扁平化结构
my @cols = flat 3..9, 11..16; use Data::Printer:from<Perl5>; p @cols;
flat是Perl 6专门用来扁平化嵌套结构的函数,它会自动把传入的多个Range展开成一维的元素集合,写法更直观易懂。
为什么Perl 5和Perl 6有差异?
简单说,Perl 5里的Range在列表上下文会自动展开成元素;但Perl 6里的Range是一个独立的对象,只有当你明确告诉它要展开(比如用|或者flat)时,才会把内部元素逐个拿出来。
内容的提问来源于stack exchange,提问作者con
相关产品推荐
相关产品推荐

