【发布时间】:2010-04-22 15:25:47
【问题描述】:
今天我尝试了以下 sn-ps 代码,但我不明白为什么它们之间会得到不同的结果。据我所知,它们是相同的。
一个使用默认值 off Hash,另一个 sn-p 在访问之前为密钥创建一个空数组。
任何了解发生了什么的人? :)
# Hash default if the key doesn't have a value set is an empty Array
a = Hash.new([])
a[:key] << 2 # => [2]
p a # => {} nil
p a[:key] # => [2]
p a.keys # => []
p a.values # => []
# Explicitly add an array for all nodes before creating
b = Hash.new
b[:key] ||= []
b[:key] << 2 # => [2]
p b # => {:key=>[2]}
p b.keys # => [:key]
Ruby 版本 1.8.7
【问题讨论】:
-
我刚才也有同样的问题:stackoverflow.com/questions/2552579/…
-
我认为它们不一样。如果我像你一样用块尝试它,我看不到我用
p a[:key]输入的值。但是默认不是一个块,我确实得到了这个值,但是除非我调用特定的键,否则它不会显示。使用a.keys或a.value我得到一个空的Array回来。似乎是一种将密钥添加到Hash的方法,无论出于何种原因,这都很好。 -
对不起,不完全一样。您已更改默认值(尝试在您的第一个示例中打印
a[:foo],您会看到)。我总是从一个空数组开始。顺便说一句,我也问过这个,似乎更相似:stackoverflow.com/questions/1822021/…
标签: ruby hash default-value