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

||=

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


当前回答

还请记住||=不是原子操作,因此,它不是线程安全的。根据经验,不要将它用于类方法。

其他回答

它的意思是或等于。它检查左边的值是否有定义,然后使用它。如果不是,使用右边的值。您可以在Rails中使用它来缓存模型中的实例变量。

一个基于rails的快速示例,我们创建了一个函数来获取当前登录的用户:

class User > ActiveRecord::Base

  def current_user
    @current_user ||= User.find_by_id(session[:user_id])
  end

end

它检查是否设置了@current_user实例变量。如果是,它将返回该值,从而节省数据库调用。但如果没有设置,则执行调用,然后将@current_user变量设置为该值。这是一种非常简单的缓存技术,但非常适合在应用程序中多次获取相同的实例变量。

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

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

第一个例子:

x ||= 10

第二个例子:

x = 20
x ||= 10

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

一个常见的误解是,||= b并不等同于a = a || b,但它的行为就像|| a = b。

但这里有一个棘手的情况。如果a未定义,则|| a = 42将引发NameError,而||= 42将返回42。所以,它们似乎不是等价的表达式。

除非x X = y 结束

除非x有值(不是nil或false),否则将其设为y

等于

X ||= y

||=是一个条件赋值运算符

  x ||= y

等于

  x = x || y

或者

if defined?(x) and x
    x = x
else 
    x = y
end