你见过这样声明的函数吗?
def foo a, **b
...
end
我知道单个*
是splat运算符。**
是什么意思?
发布于 2013-08-17 21:11:15
Ruby2.0引入了关键字参数,**
的行为类似于*
,但用于关键字参数。它返回一个包含键/值对的Hash。
对于此代码:
def foo(a, *b, **c)
[a, b, c]
end
下面是一个演示:
> foo 10
=> [10, [], {}]
> foo 10, 20, 30
=> [10, [20, 30], {}]
> foo 10, 20, 30, d: 40, e: 50
=> [10, [20, 30], {:d=>40, :e=>50}]
> foo 10, d: 40, e: 50
=> [10, [], {:d=>40, :e=>50}]
发布于 2017-07-27 06:50:08
此外,您还可以在调用方使用它,如下所示:
def foo(opts); p opts end
bar = {a:1, b:2}
foo(bar, c: 3)
=> ArgumentError: wrong number of arguments (given 2, expected 1)
foo(**bar, c: 3)
=> {:a=>1, :b=>2, :c=>3}
https://stackoverflow.com/questions/18289152
复制相似问题