首页 > 解决方案 > Ruby 关键字参数说明

问题描述

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

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

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

标签: rubykeyword-argument

解决方案


它只是一个关键字参数,默认值为空哈希:

def initialize(arg: {})
  arg
end

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

虽然它真的很奇怪而且很单一。在 Ruby 2.0 引入对关键字的一流支持之前,您声明了一个采用可选选项哈希的方法:

def initialize(hash = {})

end

这个参数必须在列表的末尾。名字意义不大。

使用 Ruby 2.0,您可以声明一个方法,该方法采用任意数量的关键字,并带有双 splat:

def initialize(**other_keyword_args)

end

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

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

end

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


推荐阅读