编辑:
在这里,有很多很棒的答案,直到我不知道选择哪个作为“答案”。根据评论建议,该问题应标记为“主题外”。因此,很抱歉,我不会选择答案,如果其他人有相同的问题,我将在此保留。
之间有什么区别:
(1)
a = {
:x => 1
}
Run Code Online (Sandbox Code Playgroud)
和
(2)
b = {
:x => 1,
:y => nil
}
Run Code Online (Sandbox Code Playgroud)
考虑到:(1),a[:y] returns nil
而对于(2),b[:y] returns nil以及
我看到的唯一区别是当我输出时:
(1)
{
:x => 1
}
Run Code Online (Sandbox Code Playgroud)
和(2)
{
:x => 1
:y => nil
}
Run Code Online (Sandbox Code Playgroud)
有几个区别。让我描述两个,让您知道在哪里看:
Hash#fetch 如果不存在密钥,则会引发错误(或调用提供的块):
a.fetch(:y)
# >> KeyError: key not found: :y
> a.fetch(:y){ "100" }
# => "100"
b.fetch(:y)
# => nil
b.fetch(:y){ "100" }
# => nil
Run Code Online (Sandbox Code Playgroud)
Hash#map(以及所有其他迭代器)将具有nil值的密钥考虑在内:
a.map{|k, v| [k, v]}
# => [[:x, 1]]
b.map{|k, v| [k, v]}
# => [[:x, 1], [:y, nil]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |