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