归约运算符使用用户定义的函数错误
Reduction operator using user-defined function error
raku 网页说,额外的括号应该用于归约运算符中的用户定义函数:https://docs.raku.org/language/operators#Reduction_metaoperators
但是,当我将函数作为变量传递时出现错误(我使用的是 Rakudo Star 2010.10):
> sub lessThan ($a, $b) { $a < $b }
&lessThan
> my @a = ((1,2,3), (6,5,4))
[(1 2 3) (6 5 4)]
> sub x (@arrOfArr, &func) { say @arrOfArr.grep( { [[&func]] ($_[0], $_[1], $_[2]) } ); }
&x
> x(@a, &lessThan)
((1 2 3) (6 5 4)) # <----------------------------------- this is not what I expected
> say @a.grep( { [<] ($_[0], $_[1], $_[2]) } );
((1 2 3)) # <------------------------------------------- this is what I want
那么,我做错了什么?
有两个问题。
首先,您需要为您的潜艇添加 is assoc<chain>
特征。
但是还是不行,因为有一个bug需要修复:Reduction with a function reference fails to honour chain
associativity.
raku 网页说,额外的括号应该用于归约运算符中的用户定义函数:https://docs.raku.org/language/operators#Reduction_metaoperators
但是,当我将函数作为变量传递时出现错误(我使用的是 Rakudo Star 2010.10):
> sub lessThan ($a, $b) { $a < $b }
&lessThan
> my @a = ((1,2,3), (6,5,4))
[(1 2 3) (6 5 4)]
> sub x (@arrOfArr, &func) { say @arrOfArr.grep( { [[&func]] ($_[0], $_[1], $_[2]) } ); }
&x
> x(@a, &lessThan)
((1 2 3) (6 5 4)) # <----------------------------------- this is not what I expected
> say @a.grep( { [<] ($_[0], $_[1], $_[2]) } );
((1 2 3)) # <------------------------------------------- this is what I want
那么,我做错了什么?
有两个问题。
首先,您需要为您的潜艇添加 is assoc<chain>
特征。
但是还是不行,因为有一个bug需要修复:Reduction with a function reference fails to honour chain
associativity.