60 votes

Quelle est la réponse à la question bonus dans test_changing_hashes de Ruby Koans?

Dans le Ruby Koans, la section about_hashes.rb comprend le code suivant et de le commenter:

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

Je ne peux pas trouver la réponse à la question bonus dans le commentaire - j'ai essayé de le faire réellement la substitution ils suggèrent, et le résultat est le même. Tout ce que je peux comprendre, c'est que c'est pour des raisons de lisibilité, mais je ne vois pas la programmation en général des conseils comme celui appelé ailleurs dans ce tutoriel.

(Je sais que cela sonne comme quelque chose qui serait déjà répondu quelque part, mais je ne peux pas creuser quoi que ce soit d'autorité.)

90voto

Vasiliy Ermolovich Points 14719

C'est parce que vous ne pouvez pas utiliser quelque chose comme ceci:

assert_equal { :one => "eins", :two => "dos" }, hash

Ruby pense que { ... } est un bloc. Donc, vous devriez "cassé dans une variable", mais vous pouvez toujours utiliser assert_equal({ :one => "eins", :two => "dos" }, hash)

2voto

Matt Kim Points 83

Je pensais que c'était plus lisible, mais vous pouvez toujours faire quelque chose comme ceci:

assert_equal true, { :one => "eins", :two => "dos" } == hash

0voto

Mich Dart Points 570

Un autre test que vous pouvez faire est la suivante:

assert_equal {:one => "eins", :two => "dos"}, hash

J'ai simplement inversé les assert_equal paramètres. Dans ce cas, Ruby ne sera pas par le biais d'un expcetion.

Mais il est toujours une mauvaise solution pour moi. C'est beaucoup plus lisible à l'aide d'une variable distincte et le test d'une condition booléenne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X