题
这个问题已经有一个答案在这里:
好的所以我想创造一个哈希它有一个空的散列作缺省值。有点怪怪的,我知道,但是我们要说,我认为这可能是有用的。
这是我做了什么:
>> a = Hash.new({})
=> {}
>> a[:a][:b] = 5
=> 5
>> a
=> {}
>> a[:a]
=> {:b=>5}
>> a.keys
=> []
>> a.size
=> 0
>> a[:a].size
=> 1
换句话说,我没有看到哈希件,当我检查的散列,但我可以访问它通过其关键。
这是预期的行为?什么在这里?
顺便说一句,这是Ruby1.9.1,没有试图以前的版本。
编辑:简化例子,因为它不必是一个哈哈希哈希...
解决方案
预计行为(在所有红宝石的版本)。如果你实验的一位另外,你看,你总是访问同一散列,不管这把钥匙,你使用:
>> a[:a][:b] = 1
=> 1
>> a[:c][:d] = 2
=> 2
>> a[:d]
=> {:b=>1, :d=>2}
该方式的散列。新与缺省参数的工作原理是:如果你这样做 hash[key]
它检查是否的关键存在的散列。如果是这样,它返回的价值,关键。如果不返回的缺省值。它不会增加的关键散和其将返回的同样的默认对象(非副本)每一时间。
得到你想要什么,你想要指定一个默认块替代。这样,区块将被执行的每次访问的关键,是不是在散。内部块你可以创建一个新的散列和组的关键"点",散列。像这样:
Hash.new { |h,k| h[k] = {} }
不隶属于 StackOverflow