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

def foo a, **b
  ...
end

我知道一个*是splat操作员.**是什么意思?

推荐答案

Ruby 2.0引入了关键字参数,**的作用类似于*,但用于关键字参数.它返回一个包含键/值对的散列.

对于此代码:

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}]

Ruby相关问答推荐

如何在 Ruby 中为链表实现#pop

无法解析音频文件 track1.m4a

在 ruby​​ 中提取文档中的主题标签和部分

使用正则表达式判断用户输入的开头是否正好有两个大括号

为什么 Ruby 中的 `a = a` `nil`?

从Electron邮件中删除签名和回复

如何删除Ruby中数组中满足条件的所有元素?

将哈希转换为 struct

在 OSX 10.10 Yosemite 上安装 Nokogiri

升级到 Rubygems 1.5.0 后,Bundler 抛出未初始化的常量 Gem::SilentUI (NameError) 错误

从命令行使用Bundle 器将 gem 添加到 gemfile

如何合并 Ruby 哈希

Ruby 中的=~运算符是什么?

为什么这个 Ruby 对象同时具有 to_s 和 inspect 似乎做同样事情的方法?

使用哈希值呈现 ERB 模板

Ruby:是否可以在模块中定义类方法?

如何在 Ruby 循环的第一次迭代中采取不同的行动?

从 'mm/dd/yyyy' 格式解析 ruby​​ DateTime

查找与给定条件匹配的元素的索引

def `self.function` 名称是什么意思?