Я иду через 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, например. Hash.new([]), который хорошо ответил на вопрос.
Итак, я понимаю, как это работает, мой вопрос, почему значение по умолчанию, такое как целое число, которое увеличивается, не изменяется во время использования? Например:
puts "Text please: "
text = gets.chomp
words = text.split(" ")
frequencies = Hash.new(0)
words.each { |word| frequencies[word] += 1 }
Это будет принимать пользовательский ввод и подсчитывать количество раз, когда каждое слово используется, оно работает, потому что всегда используется значение по умолчанию 0.
У меня такое чувство, что оно связано с оператором <<
, но мне бы хотелось объяснить.