下面的代码在Ruby中是什么意思?

||=

它的语法有什么意义或原因吗?


当前回答

这是默认的赋值表示法

例如:x ||= 1 这将检查x是否为nil。如果x确实为nil,那么它就会赋给它一个新值(在我们的例子中是1)

更明确的表示: 如果x == nil X = 1 结束

其他回答

A ||= b

表示如果'a'中存在任何值并且您不想更改它,则继续使用该值,否则如果'a'没有任何值,则使用'b'的值。

简单的话,如果左手边不为空,则指向现有的值,否则指向右边的值。

假设a = 2, b = 3

那么,||= b将得到a的值,即2。

当a计算为某个值时,结果不是false或nil..这就是为什么它不计算b的值。

现在假设a = nil, b = 3。

那么||= b将得到3,即b的值。

因为它首先尝试评估a的值,结果是nil..它求出b的值。

ror app中使用的最佳示例是:

#To get currently logged in iser
def current_user
  @current_user ||= User.find_by_id(session[:user_id])
end

# Make current_user available in templates as a helper
helper_method :current_user

其中,User.find_by_id(session[:user_id])当且仅当@current_user之前未初始化时触发。

这是默认的赋值表示法

例如:x ||= 1 这将检查x是否为nil。如果x确实为nil,那么它就会赋给它一个新值(在我们的例子中是1)

更明确的表示: 如果x == nil X = 1 结束

||=称为条件赋值运算符。

它基本上像=一样工作,但如果一个变量已经被赋值,它将什么都不做。

第一个例子:

x ||= 10

第二个例子:

x = 20
x ||= 10

在第一个例子中,x现在等于10。然而,在第二个例子中,x已经被定义为20。所以条件运算符没有作用。执行X ||= 10后,X仍然是20。

a ||= b

等于

a || a = b

而不是

a = a || b

因为您使用默认值定义哈希(对于任何未定义的键,哈希将返回默认值)

a = Hash.new(true) #Which is: {}

如果你使用:

a[10] ||= 10 #same as a[10] || a[10] = 10

A仍然是:

{}

但如果你这样写

a[10] = a[10] || 10

一个变成了:

{10 => true}

因为你已经在键10处赋值了它自己的值,默认为true,所以现在哈希是为键10定义的,而不是一开始就不执行赋值。