gpt4 book ai didi

ruby - `nil` 上的双响

转载 作者:数据小太阳 更新时间:2023-10-29 08:36:39 25 4
gpt4 key购买 nike

我的理解是,非数组对象上的单个 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。为什么会这样?

编辑 我不是在问设计背后的原因。我在问我关于双拍的想法错在哪里。

最佳答案

嗯,识别模式和预测事物是我们人类的超能力。然而,这并不总是正确的。这是一个例子。 Ruby 在 splat 和 double splat 方面并不一致。您的思维方式是“记住”的好方法,但这不完全是 Ruby 处理 splats 的方式。

查看此 bug report了解更多详情。在此错误报告中,Ruby 的作者 Matz 宁愿删除能够拼写 nil 的功能,也不愿将双拼写添加到 nil

关于ruby - `nil` 上的双响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34125769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com