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

我希望它能够发挥作用,foo[:bar] = true unless foo.key? :bar但事实并非如此。如果尚未声明哈希值,是否有更短的方法有条件地声明它?

4

3 回答 3

3

You can use .fetch if you don't need to store the value

hash.fetch(:key, :default)

Or give Hash a proc.

hash = Hash.new { |hash, key| hash[key] = 'default-value' }
hash[:a] = 'foo'
p hash[:b]
# => 'default-value'
于 2013-03-08T23:44:20.000 回答
1

为什么 ||= 在哈希上重新分配错误值?

因为这就是它的用途:如果为假,则分配,否则不要理会。它还应该做什么?

于 2013-03-09T00:17:55.793 回答
0

已经讨论了您的代码不起作用的原因,例如这里

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

foo = {}
foo.default = true
于 2013-03-08T23:49:07.800 回答