0

可能重复:
||=(或等于)在 Ruby 中是什么意思?

我正在学习 Ruby,对以下代码感到困惑。我可以理解它的作用,但无法理解它是如何工作的。

h = Hash.new
h['key1'] ||= 'value1'
=> "value1"

p h
=> {"key1"=>"value1"}
4

3 回答 3

0

给定一个Hash

hash = {}

这个表达式:

hash[:key] ||= :value

扩展为:

hash[:key] || hash[:key] = :value

Ruby 的逻辑运算符shortcircuit,这意味着只有当且仅当是orhash[:key] = :value时才会执行。hash[:key]falsenil

如果它是其他任何东西,它的值本身就足以确定逻辑析取的结果,并且不会计算表达式的其余部分。

根本不同于:

hash[:key] = hash[:key] || :value

在这种情况下,该[]=方法将被调用任何一种方式,唯一的区别是它将接收哪个参数::value如果hash[:key]falseor ,否则它本身nil的值。hash[:key]

于 2012-06-20T16:38:51.553 回答
-1

它是一个缩写的赋值伪操作符。其中有十一个;最常见的是:

x += y #expands to x = x+y

||=以同样的方式进行:

x ||= y expands to x = x||y

它适用于 +, -, , /, %, * , &&, ||, &, |, ^, <<, >>。

于 2012-06-20T16:06:36.263 回答
-2

中的默认值Hash.newnil

所以h['key1'] ||= 'value1'作为“如果key='key1'还没有对应的值,让值是'value1'”

于 2012-06-20T16:00:33.653 回答