P07 - 将嵌套数组结构扁平化。
作者:Johan Viklund
我们使用 gather/take 结构。
gather 块使用 take 语句构建列表。每个 take 语句都会向列表中添加一个元素。gather 块返回完整的列表。
gather 块使用动态作用域,因此 take 语句可以位于另一个子例程中。
for @t -> $t
迭代 @t
,将每个元素依次放入 $t
中
~~
是智能匹配运算符。这里我们使用它来检查 $t
的类型。我们也可以使用 $t.isa(Array)
。
规范
P07 (**) Flatten a nested array structure. Transform an array, possibly holding arrays as elements into a `flat' list by replacing each array with its elements (recursively).
示例
> splat([1,[2,[3,4],5]]).perl.say; (1, 2, 3, 4, 5)
源代码:P07-viklund.pl
use v6; sub _splat(@t) { for @t -> $t { if $t ~~ Array { _splat($t) } else { take $t } } } sub splat (@t) { gather _splat(@t) } splat([1, [2,[3,4], 5]]).list.perl.say;