为什么|| =在哈希上重新分配一个假值?

时间:2013-03-08 23:41:12

标签: ruby hash

foo = { bar: false }
foo[:bar] ||= true

我希望它的功能类似于foo[:bar] = true unless foo.key? :bar,但事实并非如此。如果尚未声明哈希值,是否有更短的方式来有条件地声明哈希值?

3 个答案:

答案 0 :(得分:3)

如果您不需要存储值

,则可以使用.fetch
hash.fetch(:key, :default)

或者给哈希一个过程。

hash = Hash.new { |hash, key| hash[key] = 'default-value' }
hash[:a] = 'foo'
p hash[:b]
# => 'default-value'

答案 1 :(得分:1)

  

为什么|| =在哈希上重新分配一个假值?

因为那就是它的用途:如果错误则分配,否则单独留下。它还应该做什么?

答案 2 :(得分:0)

您的代码无法工作的原因已经讨论过,例如: here

根据您的使用情况,将默认值设置为哈希可能是最合适的解决方案:

foo = {}
foo.default = true