saw*_*awa 5 ruby hash literals splat double-splat
我的理解是,非数组对象上的单个 splat 调用to_a然后将元素分离。由于nil.to_a被定义为[],因此会发生以下转换:
[:foo, *nil, :bar]
# => [:foo, *nil.to_a, :bar]
# => [:foo, *[], :bar]
# => [:foo, :bar]
Run Code Online (Sandbox Code Playgroud)
通过类比,我认为非哈希对象上的 double splat 调用to_h然后将键值对分离。由于nil.to_h被定义为{},我预计会发生以下转换:
{"foo" => 1, **nil, "bar" => 2}
# => {"foo" => 1, **nil.to_h, "bar" => 2}
# => {"foo" => 1, **{}, "bar" => 2}
# => {"foo" => 1, "bar" => 2}
Run Code Online (Sandbox Code Playgroud)
但实际上,它会引发一个错误:no implicit conversion of nil into Hash。为什么它会这样?
编辑我不是在问设计背后的原因。我想问我关于双打的想法哪里错了。
| 归档时间: |
|
| 查看次数: |
542 次 |
| 最近记录: |