gpt4 book ai didi

arrays - 为什么Ruby Koans习题中about_hashes.rb中的test_default_value_is_the_same_object的答案是数组?

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

我正在做 ruby​​ koans 练习,我有点困惑为什么 test_default_value_is_the_same_object 方法练习中的答案是这样的。下面是代码:

def test_default_value_is_the_same_object
hash = Hash.new([])

hash[:one] << "uno"
hash[:two] << "dos"

assert_equal ["uno", "dos"], hash[:one]
assert_equal ["uno", "dos"], hash[:two]
assert_equal ["uno", "dos"], hash[:three]
end

我不确定为什么不管键是什么,值总是“uno”和“dos”?我想当键是one时,返回值应该是“uno”;当键为“二”时,返回值应为“dos”。为什么不管键是什么,值总是一个数组?

谢谢你,我期待着你的回答!

最佳答案

hash = Hash.new([])

将用 [] 实例化一个新数组(我们称它为 Harvey),然后将 Harvey 作为默认值进行哈希。

hash[:one]

不存在,所以你得到哈维。哈维得到 "uno"添加到他,使用 Array#<<运算符(相当于 harvey.push("one") )

hash[:two]

也不存在,所以你又得到了 Harvey(记住,他已经包含了 "uno" )。他现在也得到了"dos" .

hash[:three]

Harvey 返回,仍然带着他的 "uno""dos" .

如果您希望代码表现得像您认为的那样,每个键中都有不同的数组,则每次需要默认值时都需要返回一个新数组,而不是每次都返回 Harvey:

hash = Hash.new { |h, k| h[k] = [] }

如果你只是想让散列与数组无关,请忽略 Harvey,并使用 Hash#[]=而不是 Array#<< :

hash = Hash.new()

hash[:one] = "uno"
hash[:two] = "dos"

关于arrays - 为什么Ruby Koans习题中about_hashes.rb中的test_default_value_is_the_same_object的答案是数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35833583/

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