我很难理解为什么 zip-addZ+
运算符在某些情况下不起作用。
我有一些我想总结的 2 元素列表。
无论我使用列表还是数组,这些都按预期工作:
say (1, 2) Z+ (3, 4) # (4, 6)
say [1, 2] Z+ (3, 4) # (4, 6)
say [1, 2] Z+ [3, 4] # (4, 6)
say (1, 2) Z+ [3, 4] # (4, 6)
现在我们将做同样的事情,但我将使用存储在其他地方的值更改正确的操作数。在这种情况下,我有一个列表数组:
my @foo = (1,1), (2,2);
say @foo.WHAT; # (Array)
say @foo[1].WHAT; # (List)
say @foo[1]; # (2,2)
say (3,3) Z+ @foo[1]; # (5) ???
这给出了意想不到的(至少对我来说:))结果(5)
。
有几种方法可以解决这个问题。
第一个是强制得到的元素是一个列表:
my @foo = (1,1), (2,2);
say @foo.WHAT; # (Array)
say @foo[1].WHAT; # (List) <== It was already a list, but...
say @foo[1]; # (2,2)
say (3,3) Z+ @foo[1].list; # <== changed. (5,5)
另一种是将@foo
定义更改为列表而不是数组(通过is List
或绑定:=
值)
my @foo is List = (1,1), (2,2); # <=== Changed
say @foo.WHAT; # (Array)
say @foo[1].WHAT; # (List) <== It was already a list
say @foo[1]; # (2,2)
say (3,3) Z+ @foo[1]; # (5,5)
为什么第一个案例不起作用?