Ruby koans:如何解决about_hashes.rb';测试默认值';有道理?

Ruby koans:如何解决about_hashes.rb';测试默认值';有道理?,ruby,Ruby,对于Ruby koan 40,命令行告诉我代码中的下划线部分 def test_default_value hash1 = Hash.new hash1[:one] = 1 assert_equal 1, hash1[:one] assert_equal nil, hash1[:two] hash2 = Hash.new("dos") hash2[:one] = 1 assert_equal 1, hash2[:one] as

对于Ruby koan 40,命令行告诉我代码中的下划线部分

def test_default_value
    hash1 = Hash.new
    hash1[:one] = 1

    assert_equal 1, hash1[:one]
    assert_equal nil, hash1[:two]

    hash2 = Hash.new("dos")
    hash2[:one] = 1

    assert_equal 1, hash2[:one]
    assert_equal __, hash2[:two] # <<<< here's the underscore section
end
def测试默认值
hash1=Hash.new
hash1[:一]=1
断言等于1,hash1[:1]
断言等于nil,hash1[:2]
hash2=Hash.new(“dos”)
hash2[:一]=1
断言_等于1,hash2[:一]

assert_equal,hash2[:two]#给定给
new
方法的值是缺少键的默认值

按照

如果该散列随后被不对应的键访问 对于散列项,返回的值取决于所使用的新项的样式 创建散列。在第一种形式中,访问返回nil。如果obj 指定时,此单个对象将用于所有默认值


hash2
使用默认值
“dos”
初始化

因此,每次访问未明确指定值的密钥时,都会返回
“dos”
。请注意,每个哈希都有一个默认值。默认情况下,它只是
nil

默认值未“指定”。当访问散列值时,Ruby会首先尝试查找在散列中显式设置的值。仅当未找到时,才会返回默认值

最后一句话:创建散列时,还有另一种设置默认值的形式:

my_hash = Hash.new { |hash, key| hash[key] = "dos" }
通常,此表单是首选的,因为在这里,默认值是每次访问不存在的键时的新对象。如果您想就地更改默认值,这一点很重要(在数组或其他哈希的情况下,您通常会这样做)


对于简单的东西,这可能并不重要。只是为了以后记住:)

哦,天哪。我懂了。为什么他们似乎暗示Ruby知道dos是2??他们应该用香蕉作为钥匙!谢谢你的详细答复。我完全忽略了它正在设置一个默认值,并认为它知道:两个应该是“dos”。让我觉得这更像是“红宝石魔法”。
my_hash = Hash.new { |hash, key| hash[key] = "dos" }