我在变量中有lambda
,其参数签名我不知道。我希望使用**
将选项哈希传递给它,但前提是它需要选项。
到目前为止,我有这个:
def call_func(func, *args, **options)
if func.arity < 0
func[*args, **options]
else
func[*args]
end
end
但这只适用于像
这样的lambdaslambda { |x, y| x + y }
或
lambda { |x, **opts| opts[:y] + x }
但是使用了一系列参数的lambdas失败了,比如
lambda { |*args| args.join ", " }
有没有办法可以检测到一个lambda,它的签名只消耗了一个参数数组而没有请求一个选项哈希?
答案 0 :(得分:1)
在*args
案例中,arity
为-1
。要在没有参数的情况下将所有案例分开,您可以nonzero?
代替< 0
。