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 次 |
最近记录: |