可能重复:
||=(或等于)在 Ruby 中是什么意思?
我正在学习 Ruby,对以下代码感到困惑。我可以理解它的作用,但无法理解它是如何工作的。
h = Hash.new
h['key1'] ||= 'value1'
=> "value1"
p h
=> {"key1"=>"value1"}
可能重复:
||=(或等于)在 Ruby 中是什么意思?
我正在学习 Ruby,对以下代码感到困惑。我可以理解它的作用,但无法理解它是如何工作的。
h = Hash.new
h['key1'] ||= 'value1'
=> "value1"
p h
=> {"key1"=>"value1"}
给定一个Hash
:
hash = {}
这个表达式:
hash[:key] ||= :value
扩展为:
hash[:key] || hash[:key] = :value
Ruby 的逻辑运算符shortcircuit,这意味着只有当且仅当是orhash[:key] = :value
时才会执行。hash[:key]
false
nil
如果它是其他任何东西,它的值本身就足以确定逻辑析取的结果,并且不会计算表达式的其余部分。
这根本不同于:
hash[:key] = hash[:key] || :value
在这种情况下,该[]=
方法将被调用任何一种方式,唯一的区别是它将接收哪个参数::value
如果hash[:key]
是false
or ,否则它本身nil
的值。hash[:key]
它是一个缩写的赋值伪操作符。其中有十一个;最常见的是:
x += y #expands to x = x+y
||=
以同样的方式进行:
x ||= y expands to x = x||y
它适用于 +, -, , /, %, * , &&, ||, &, |, ^, <<, >>。
中的默认值Hash.new
是nil
所以h['key1'] ||= 'value1'
作为“如果key='key1'还没有对应的值,让值是'value1'”