我刚接触Ruby并在运行Ruby Koans。在Ruby Koans的about_hashes.rb文件中,有一个关于给哈希表赋默认值的例子。
hash = Hash.new([])
hash[:one] << "uno"
hash[:two] << "dos"
puts hash[:one] # this is ["uno", "dos"]
这里的
hash[:one]
、hash[:two]
以及任何键值,如hash[:three]
(不存在的键值),都具有值["uno"和"dos"]。我不明白"<<"在这里是如何使用的。此外,当我尝试提取哈希表的键和值或者打印键/值时,它们为空。puts (hash.values.size) # size is 0 here
puts (hash.keys.size) # size is 0
puts hash.values # nothing gets printed
puts hash.keys #nothing gets printed.
所以这里究竟发生了什么?如果哈希表中没有存储它们作为键或值,那么值被存储在哪里呢。
在下一个示例中,当哈希表被定义为
hash = Hash.new {|hash, key| hash[key] = [] }
hash[:one] << "uno"
hash[:two] << "dos"
puts hash[:one] #this is "uno"
puts hash[:two] #this is "dos"
puts hash[:three] # this is undefined.
我猜在第二个例子中,哈希正在用一个空数组初始化所有的键。因此,当使用 "<<" 运算符时,“uno”被附加到空数组中?我对这两个例子感到困惑。我不知道它们两个都在发生什么。我在谷歌上也没有找到太多关于这个例子的信息。如果有人能帮我解释这两个例子,那就太好了。提前感谢。