仅在lambda请求时才传递带有双splat的哈希

时间:2018-01-10 03:26:51

标签: ruby hash lambda

我在变量中有lambda,其参数签名我不知道。我希望使用**将选项哈希传递给它,但前提是它需要选项。

到目前为止,我有这个:

def call_func(func, *args, **options)
    if func.arity < 0
        func[*args, **options]
    else
        func[*args]
    end
end

但这只适用于像

这样的lambdas
lambda { |x, y| x + y }

lambda { |x, **opts| opts[:y] + x }

但是使用了一系列参数的lambdas失败了,比如

lambda { |*args| args.join ", " }

有没有办法可以检测到一个lambda,它的签名只消耗了一个参数数组而没有请求一个选项哈希?

1 个答案:

答案 0 :(得分:1)

*args案例中,arity-1。要在没有参数的情况下将所有案例分开,您可以nonzero?代替< 0