3

所以我在 Ruby 1.9 中有一些函数,在这些函数中执行与此等效的函数会非常非常好:

def foo(**kwargs):
    ...do stuff...

def bar(**kwargs):
    foo(x = 2, y = 3, **kwargs)

所以Ruby有选择,但如果我这样做:

def f(opts)
    print opts.keys
end

def g(opts)
    f(opts, :bar=>3)
end

g(:foo => 1)

我得到:

script:1:in f': wrong number of arguments (2 for 1) (ArgumentError) from script:6:in g' from script:9:in <main>'

有没有办法将选择从 g 传递到 f?

4

2 回答 2

4

您的

def g(opts)
    f(opts, :bar=>3)
end

将两个参数传递给f. 让我们通过一个,这样做:

def g(opts)
    f(opts.merge(:bar=>3))
end
于 2013-09-04T01:21:52.540 回答
1

像下面这样?

def f(opts)
    print opts.keys
end

def g(opts)
    opts[:bar] = 3
    f(opts)
end

g(:foo => 1)
于 2013-09-04T01:21:48.633 回答