【发布时间】:2015-12-07 03:04:18
【问题描述】:
我的理解是,非数组对象上的单个 splat 调用to_a,然后将元素分离。由于nil.to_a 被定义为[],因此会发生以下转换:
[:foo, *nil, :bar]
# => [:foo, *nil.to_a, :bar]
# => [:foo, *[], :bar]
# => [:foo, :bar]
以此类推,我认为非哈希对象上的双重 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}
但实际上,它引发了一个错误:no implicit conversion of nil into Hash。为什么会这样?
编辑我不是在问设计背后的原因。我在问我关于双 splat 的想法哪里错了。
【问题讨论】:
标签: ruby hash literals splat double-splat