有没有一种方法可以在Ruby 1.9.3中实现Python的kwargs传递?

3

我在Ruby 1.9中有一些函数,希望能够实现以下功能的函数:

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

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

因此Ruby拥有opts,但如果我这样做:
def f(opts)
    print opts.keys
end

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

g(:foo => 1)

我得到:

script:1:in f': 参数个数有误 (需要 1 个参数,实际给出 2 个) (ArgumentError) from script:6:in g' from script:9:in <main>'

是否有一种方法可以从 g 中将 opts 传递到 f 中?

2个回答

4

Your

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

将两个参数传递给f,如果想只传递一个参数,则可以这样做:

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

1
像下面这样吗?
def f(opts)
    print opts.keys
end

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

g(:foo => 1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接