仅当 lambda 请求一个哈希时才传递带有双板的哈希



我在一个变量中有一个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

最新更新