所以我在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>'
有没有办法将opts从g传递到f?
答案 0 :(得分:4)
您
def g(opts)
f(opts, :bar=>3)
end
将两个参数传递给f
。要让它通过,请执行以下操作:
def g(opts)
f(opts.merge(:bar=>3))
end
答案 1 :(得分:1)
如下所示?
def f(opts)
print opts.keys
end
def g(opts)
opts[:bar] = 3
f(opts)
end
g(:foo => 1)