Каков ответ на вопрос о бонусе в test_changing_hashes Ruby Koans?
В Ruby Koans раздел about_hashes.rb содержит следующий код и комментарий:
def test_changing_hashes
hash = { :one => "uno", :two => "dos" }
hash[:one] = "eins"
expected = { :one => "eins", :two => "dos" }
assert_equal true, expected == hash
# Bonus Question: Why was "expected" broken out into a variable
# rather than used as a literal?
end
Я не могу понять ответ на бонусный вопрос в комментарии - я пробовал на самом деле делать замену, которую они предлагают, и результат тот же. Все, что я могу понять, это то, что оно предназначено для читаемости, но я не вижу общих советов по программированию, подобных тем, которые вызываются в другом месте этого учебника.
(Я знаю, это звучит как что-то, на что уже можно было бы ответить, но я не могу выкопать что-либо авторитетное.)
Ответы
Ответ 1
Это потому, что вы не можете использовать что-то вроде этого:
assert_equal { :one => "eins", :two => "dos" }, hash
Ruby считает, что {...} является блоком. Итак, вы должны "разбить его на переменную", но вы всегда можете использовать assert_equal({ :one => "eins", :two => "dos" }, hash)
Ответ 2
Я думал, что это более читаемо, но вы все равно можете сделать что-то вроде этого:
assert_equal true, { :one => "eins", :two => "dos" } == hash
Ответ 3
Другим тестом, который вы можете использовать, является следующее:
assert_equal hash, {:one => "eins", :two => "dos"}
Я просто поменял параметры на assert_equal
.
В этом случае Ruby не будет генерировать исключение.
Но мне все еще кажется плохим решением. Его гораздо читаемость с использованием отдельной переменной и проверка логического состояния.