Подтвердить что ты не робот

Каков ответ на вопрос о бонусе в 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

Я не могу понять ответ на бонусный вопрос в комментарии - я пробовал на самом деле делать замену, которую они предлагают, и результат тот же. Все, что я могу понять, это то, что оно предназначено для читаемости, но я не вижу общих советов по программированию, подобных тем, которые вызываются в другом месте этого учебника.

(Я знаю, это звучит как что-то, на что уже можно было бы ответить, но я не могу выкопать что-либо авторитетное.)

4b9b3361

Ответ 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 не будет генерировать исключение.

Но мне все еще кажется плохим решением. Его гораздо читаемость с использованием отдельной переменной и проверка логического состояния.