Ruby 关键字参数说明

标签 ruby keyword-argument

最近我看到这个函数签名:

   class Foo < Bar
    def initialize(arg: {})
      ...
   end

带花括号的关键字参数 (arg: {}) 在这里意味着什么?

最佳答案

它只是一个带有空散列作为默认值的关键字参数:

def initialize(arg: {})
  arg
end

irb(main):011:0> initialize().class
=> Hash

虽然它真的很奇怪而且不合常理。在 Ruby 2.0 引入对关键字的一流支持之前,您声明了一个采用 optional 散列的方法:

def initialize(hash = {})

end

这个参数必须在列表的末尾。名字并不重要。

在 Ruby 2.0 中,您可以声明一个方法,该方法接受任意数量的带有双拼音的关键字:

def initialize(**other_keyword_args)

end

您也可以将它与位置和命名关键字参数结合使用:

def initialize(a, b = 2, foo:, bar: 2, **other_keyword_args)

end

如果有更多参数,使用 initialize(arg: {}, ...) 是有意义的,而这个参数需要一个散列,但它本身就很奇怪。

关于Ruby 关键字参数说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59120058/

相关文章:

ruby-on-rails - 单元测试验证奇怪行为的存在

ruby-on-rails - 在 slim 的标签内嵌套文本

python - 使用变量作为函数的关键字参数

python - 如果 kwargs 中的键与函数关键字冲突怎么办

rust - 如何在 Rust 中最好地 *fake* 关键字样式函数参数?

ruby - 如何在 Ruby Tk 中绑定(bind)按键事件

ruby-on-rails - 如何将类级方法扩展到 Rails 中的单独模块?

ruby-on-rails - 如何在版本 4 + 中使用 Rails 未定义方法 `attr_accessible'?

python - 使用 super() 继承关键字参数,但只有在创建实例时指定时才会列出它们

python - dict(**kwargs) 总是给出键为字符串类型的字典吗?