数组 – 为什么Ruby Koans练习的about_hashes.rb中的test_defaul
发布时间:2020-12-17 04:02:43 所属栏目:百科 来源:网络整理
导读:我正在进行 ruby koans练习,并且在test_default_value_is_the_same_object方法练习中为什么答案是这样的,我有点困惑.以下是代码: def test_default_value_is_the_same_objecthash = Hash.new([])hash[:one] "uno"hash[:two] "dos"assert_equal ["uno","dos"
我正在进行
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",hash[:two] assert_equal ["uno",hash[:three] end 我不确定为什么无论键是什么,值总是“uno”和“dos”?我想当密钥是1时,返回的值应该是“uno”;当key为“two”时,返回的值应为“dos”.为什么不管键是什么,值总是一个数组? 谢谢,我期待着你的回答! 解决方法hash = Hash.new([]) 将使用[](让我们称之为Harvey)实例化一个新数组,然后使用Harvey作为默认值进行哈希. hash[:one] 不存在,所以你得到哈维. Harvey使用Array#<<<<<<<<<<<运算符(相当于harvey.push(“one”)) hash[:two] 也不存在,所以你再次得到哈维(谁记得,已经包含“uno”).他现在也得到了“dos”. hash[:three] 哈维还是带着他的“uno”和“dos”. 如果您希望代码的行为与您认为的那样,每个键中的数组不同,则每次需要默认时都需要返回一个新数组,而不是每次都返回Harvey: hash = Hash.new { |h,k| h[k] = [] } 如果您只想让哈希与数组无关,请忽略Harvey,并使用Hash#[] =而不是Array#<<: hash = Hash.new() hash[:one] = "uno" hash[:two] = "dos" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |