知道我可以像这样操作Ruby默认的Hash
值:
h={a:1, b:2, c:3}
h[:x] # => nil
h.default = 5
h[:x] # => 5
h.default = 8
h[:y] # => 8
但是,对于具有不同默认值的多个值重复执行此操作时会非常繁琐。
如果将散列传递给其他需要某些(可能缺少的)键的默认值的方法,它也会变得危险。
在Python中,我曾经
d={'a':1, 'b':2, 'c':3}
d.get('x', 5) # => 5
d.get('y', 8) # => 8
没有任何副作用。 Ruby中有这个get
方法的等价物吗?
答案 0 :(得分:23)
是的,它被称为fetch
,它也可以占用一块:
h.fetch(:x, 5)
h.fetch(:x) {|missing_key| "Unfortunately #{missing_key} is not available"}
答案 1 :(得分:0)
#fetch
的替代方法是简单地执行以下操作:
h[:x] || 5
在Python中,缺少键会引发KeyError,但在Ruby中缺少键只返回nil。
这有一个微妙的不同含义,因为默认情况会发生在:
nil
而fetch只会对场景1产生影响。
此代码最接近的Python等价物
h.get('x') or 5
(注意虽然这仍然不同,因为Python中的真实性/虚假性不同于Ruby)