ruby - Ruby 关键字参数说明
问题描述
最近我看到了这个函数签名:
class Foo < Bar
def initialize(arg: {})
...
end
arg: {}
带花括号的关键字参数 ( ) 在这里是什么意思?
解决方案
它只是一个关键字参数,默认值为空哈希:
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: {}, ...)
将是有意义的。
推荐阅读
- xamarin - 在 Mac OS 上运行的 Xamarin Forms 中。如何访问资产目录以在 iOS 中添加新图标?
- kubernetes - Kops,自动缩放策略没有正确配置主节点?
- c# - 如何在 C# 中将 .proto 文件解析为 FileDescriptor?
- python - 创建一个“词汇表”来对词频具有相同含义的词进行分组
- javascript - React.js:如何在渲染页面之前先运行 useEffect?
- c# - EF Core 无法通过 IQueryable.Where 动态实现 OR 转换
- python - 对象不可调用 - 线程
- javascript - 基于标签的 AWS Lambda 函数过滤
- ios - 如何更改导航栏的颜色以及 iOS 中的状态栏?
- spring - “/actuator/prometheus”超时时,“http_server_requests_seconds_max”值逐渐增加