@SergioTulentsev хороший момент

от вопрос уже есть ответ здесь:

Странное, неожиданное поведение (исчезновение / изменение значений) при использовании значения по умолчанию для хэша, например Hash.new ([]) 4 ответа

Я работаю через Ruby Koans, чтобы лучше понять Ruby и TDD. Я добрался до линии 93 в кодеabout_hashes.rb и это смущает меня, как это будет переложено в конструктор по умолчанию вместо хеш-значения. Просто из любопытства я попытался использовать то же самое со строкой в ​​качестве параметра конструктора, и это дало аналогичный результат.

Теперь мой вопрос: почему, какой бы ключ я ни использовал, извлекается один и тот же объект и как бы я помещал новый объект в массив по определенному ключу в хэше метода 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] #why not ["uno"]?
    assert_equal ["uno", "dos"], hash[:two] #why not ["dos"]?
    assert_equal ["uno", "dos"], hash[:three] #why not []?

    assert_equal true, hash[:one].object_id == hash[:two].object_id
  end

def test_default_value_with_block
    hash = Hash.new {|hash, key| hash[key] = [] }

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

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

Ответы на вопрос(2)

Ваш ответ на вопрос