Ruby Koans的test_changing_hashes中的奖励问题的答案是什么?

在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 

我无法弄清楚评论中的奖金问题的答案 – 我尝试着replace他们的build议,结果是一样的。 我所能想到的仅仅是为了可读性,但是我没有看到像本教程其他地方所提到的一般编程build议。

(我知道这听起来像是某个地方已经可以回答的东西,但是我无法挖掘出任何权威性的东西。)

这是因为你不能使用这样的东西:

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

Ruby认为{…}是一个块。 所以,你应该“把它分解成一个variables”,但是你总是可以使用assert_equal({ :one => "eins", :two => "dos" }, hash)

我认为它更可读,但你仍然可以做这样的事情:

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

您可以使用另一个testing如下:

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

我只是将参数交换到assert_equal 。 在这种情况下,Ruby不会抛出exception。

但对我来说,这仍然是一个不好的解决scheme。 使用单独的variables和testing布尔条件更可读。