我想我明白了默認的方法做一個哈希...紅寶石哈希.DEFAULT設置爲一個列表
給一個鍵的默認值,如果不存在的話:
irb(main):001:0> a = {}
=> {}
irb(main):002:0> a.default = 4
=> 4
irb(main):003:0> a[8]
=> 4
irb(main):004:0> a[9] += 1
=> 5
irb(main):005:0> a
=> {9=>5}
一切都好。
但如果我設置的默認是一個空列表,或空哈希,我不知道這是在所有 ....
irb(main):001:0> a = {}
=> {}
irb(main):002:0> a.default = []
=> []
irb(main):003:0> a[8] << 9
=> [9] # great!
irb(main):004:0> a
=> {} # ?! would have expected {8=>[9]}
irb(main):005:0> a[8]
=> [9] # awesome!
irb(main):006:0> a[9]
=> [9] # unawesome! shouldn't this be [] ??
我希望/預期的行爲相同的行爲就好像我已經使用|| =操作符...
irb(main):001:0> a = {}
=> {}
irb(main):002:0> a[8] ||= []
=> []
irb(main):003:0> a[8] << 9
=> [9]
irb(main):004:0> a
=> {8=>[9]}
irb(main):005:0> a[9]
=> nil
任何人都可以解釋發生了什麼事嗎?
很好的解釋,有道理 – 2008-10-10 11:01:09
我想指出,這種行爲是不同於python的defaultdict,其中類似的代碼工作得很好。 – 2012-10-10 07:57:03