当我使用默认值(如 0)初始化 Ruby 哈希并在哈希中创建一个新条目并递增时,它的行为符合预期:
irb(main):001:0> h1 = Hash.new(0)
=> {}
irb(main):002:0> h1[:foo] += 1
=> 1
irb(main):003:0> h1
=> {:foo=>1}
irb(main):004:0> h1[:foo]
=> 1
Run Code Online (Sandbox Code Playgroud)
注意如何h1 #=> {:foo=>1}和h1[:foo] #=> 1。这正是我所期待看到的。
除非我使用空数组的默认值,否则会发生以下情况:
irb(main):005:0> h2 = Hash.new([])
=> {}
irb(main):006:0> h2[:foo] << "cats"
=> ["cats"]
irb(main):007:0> h2
=> {}
irb(main):008:0> h2[:foo]
=> ["cats"]
Run Code Online (Sandbox Code Playgroud)
注意如何h2 #=> {}和h2[:foo] #=> ["cats"]。我不知道为什么会发生这种情况。
:foo?如果我使用一些块,那么就会发生预期的行为:
irb(main):001:0> h3 = Hash.new {|hash, key| hash[key] = [] }
=> {}
irb(main):002:0> h3[:foo] << "cats"
=> ["cats"]
irb(main):003:0> h3
=> {:foo=>["cats"]}
irb(main):004:0> h3[:foo]
=> ["cats"]
Run Code Online (Sandbox Code Playgroud)
注意如何h2 #=> {:foo=>["cats"]}和h3[:foo] #=> ["cats"]。这正是我所期待看到的。
| 归档时间: |
|
| 查看次数: |
3438 次 |
| 最近记录: |