首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >双*(拆分)运算符做什么

双*(拆分)运算符做什么
EN

Stack Overflow用户
提问于 2013-08-17 21:03:17
回答 2查看 63.1K关注 0票数 234

你见过这样声明的函数吗?

代码语言:javascript
复制
def foo a, **b
  ...
end

我知道单个*是splat运算符。**是什么意思?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-17 21:11:15

Ruby2.0引入了关键字参数,**的行为类似于*,但用于关键字参数。它返回一个包含键/值对的Hash。

对于此代码:

代码语言:javascript
复制
def foo(a, *b, **c)
  [a, b, c]
end

下面是一个演示:

代码语言:javascript
复制
> 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}]
票数 408
EN

Stack Overflow用户

发布于 2017-07-27 06:50:08

此外,您还可以在调用方使用它,如下所示:

代码语言:javascript
复制
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}
票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18289152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档