【发布时间】:2023-03-17 19:23:01
【问题描述】:
您好,我正在尝试在Perl 6 https://docs.perl6.org/language/operators#Hyper_operators 中使用赋值超级运算符
my (@one, @two) «=» (<1 2 3>,<4 5 6>);
say @one;
say @two;
# Prints nothing (empty array)
# Expected behaviour:
@one=<1 2 3>;
@two=<4 5 6>;
say @one;
say @two;
# Prints [1 2 3] and [4 5 6]
如何让赋值超算子正确运行?谢谢。
【问题讨论】:
-
根据文档,hyperops 循环遍历由超符号指向的列表/数组的元素(即,如果使用
«op...,则列表在左侧,如果使用...op»,则在右侧列表使用)如果它比其他列表短。但是左边的数组是完全空的,所以有零个元素要循环,所以所有的赋值都消失在天空中的大比特桶中。 -
感谢您的评论和澄清。看起来对分配任务使用超运算符不适合嵌套列表。这显然是由
=操作员在分配列表时无法执行 assignment 引起的。幸运的是,zip 运算符作为元运算符按预期运行。 -
嗨@Romario。如果目标列表没有元素,则不适合使用 initialization,因此排除了您的示例,但它适用于 assignment,包括嵌套列表,如果cycling 是需要的和/或 autovivification / autoextending 不是。因此,例如,
my (@a, @b); @a[2] = @b[2] = Nil; (@a, @b) «=» (<1 2 3>, <4 5 6 7>); say @a, @b;显示[1 2 3][7 5 6]。
标签: raku