Fer*_*ata 9 arrays multidimensional-array perl6
平面多维数组的最短方法是什么?
以下是我的意思的一些例子:
# 2D array
my @a = [1,2],[3,4];
say @a».Slip.flat;                # prints (1 2 3 4)
# 3D array
my @b = [[1,2],[3,4]],[[5,6],[7,8]];
say @b».Slip».flat».Slip.flat;    # prints (1 2 3 4 5 6 7 8)
                                  # but needs to know how many dimensions
                                  # there are to flatten
是否有可能以递归方式展平数组数组,例如@b不写入以递归方式下降到其中的子数据或者对其维数的数量有任何了解?
我问这个是因为我相信编译器(现在或将来的实现)能够优化基于操作员的解决方案而不是sub.
不确定是否有更紧凑的方式,但是
say do gather @b.deepmap(*.take);
应该这样做.
如果你不关心扁平化结果的顺序,
say do gather @b>>.take;
也可能是一个选项,虽然我觉得(ab)使用超级算子来副作用感觉不对...
直到正确处理Hyper,raiph建议的切片到达核心,你可以添加自己的糖来@b[**]覆盖这个特定的用例
multi sub postcircumfix:<[ ]>(\SELF, HyperWhatever:D $, *% where !*) {
    gather SELF.deepmap(*.take);
}