我正在学习Ruby Koans,目前遇到第41个练习,应该是这个:
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]
assert_equal true, hash[:one].object_id == hash[:two].object_id
end
它无法理解这种行为,所以我在谷歌上搜索并找到了使用Hash默认值时的奇怪的Ruby行为,例如Hash.new([]) 很好地回答了问题。
因此,我理解了它的工作原理,我的问题是,例如增加的整数作为默认值,在使用期间为什么不会更改?例如:
puts "Text please: "
text = gets.chomp
words = text.split(" ")
frequencies = Hash.new(0)
words.each { |word| frequencies[word] += 1 }
这将接受用户输入并计算每个单词被使用的次数,它能够工作是因为始终使用默认值0。
我有一种感觉与“<<”运算符有关,但我希望得到解释。
::
混淆了,有时也称为作用域解析运算符。 - user2398029+
。 - Hauleth