两者之间是否有区别
(1)
a = {
:x => 1
}
和
(2)
b = {
:x => 1,
:y => nil
}
鉴于(1),a[:y] returns nil
对于(2),b[:y] returns nil
也是如此
我看到的唯一区别是当我输出时:
(1)
{
:x => 1
}
还有(2)
{
:x => 1
:y => nil
}
答案 0 :(得分:5)
有几个区别。让我描述两个,让您知道在哪里看
Hash#fetch
如果不存在密钥,则会引发错误(或调用提供的块):
a.fetch(:y)
# >> KeyError: key not found: :y
> a.fetch(:y){ "100" }
# => "100"
b.fetch(:y)
# => nil
b.fetch(:y){ "100" }
# => nil
Hash#map
(和所有其他迭代器)将具有nil
值的密钥考虑在内:
a.map{|k, v| [k, v]}
# => [[:x, 1]]
b.map{|k, v| [k, v]}
# => [[:x, 1], [:y, nil]]
答案 1 :(得分:3)
是的,哈希具有不同数量的对。 hsh.keys
将返回[:x, :y]
答案 2 :(得分:0)
两个哈希都返回:x
和:y
键的nil值,因为它们被配置为在找不到键时返回nil。这是Ruby中的默认行为。
但是,您可以在初始化哈希时更改该行为
c = Hash.new("foo")
c[:x] = 1
c[:x]
# => 1
c[:y]
# => "foo"