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

Dans Ruby Koans , la section about_hashes.rb inclut le code et le commentaire suivants:

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 sur les bonus dans le commentaire – j’ai essayé de faire la substitution suggérée, et le résultat est le même. Tout ce que je peux comprendre, c’est que c’est pour la lisibilité, mais je ne vois pas de conseils de programmation généraux comme ceux mentionnés ailleurs dans ce tutoriel.

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

C’est parce que vous ne pouvez pas utiliser quelque chose comme ça:

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

Ruby pense que {…} est un bloc. Donc, vous devriez “le décomposer en une variable” mais vous pouvez toujours utiliser assert_equal({ :one => "eins", :two => "dos" }, hash)

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

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

Un autre test que vous pouvez utiliser est le suivant:

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

J’ai simplement échangé les parameters avec assert_equal . Dans ce cas, Ruby ne lancera aucune exception.

Mais cela me semble toujours une mauvaise solution. C’est beaucoup plus lisible en utilisant une variable séparée et en testant une condition booléenne.