下面的代码在Ruby中是什么意思?
||=
它的语法有什么意义或原因吗?
下面的代码在Ruby中是什么意思?
||=
它的语法有什么意义或原因吗?
当前回答
||=是一个条件赋值运算符
x ||= y
等于
x = x || y
或者
if defined?(x) and x
x = x
else
x = y
end
其他回答
假设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之前未初始化时触发。
它的意思是或等于。它检查左边的值是否有定义,然后使用它。如果不是,使用右边的值。您可以在Rails中使用它来缓存模型中的实例变量。
一个基于rails的快速示例,我们创建了一个函数来获取当前登录的用户:
class User > ActiveRecord::Base
def current_user
@current_user ||= User.find_by_id(session[:user_id])
end
end
它检查是否设置了@current_user实例变量。如果是,它将返回该值,从而节省数据库调用。但如果没有设置,则执行调用,然后将@current_user变量设置为该值。这是一种非常简单的缓存技术,但非常适合在应用程序中多次获取相同的实例变量。
A ||= b
表示如果'a'中存在任何值并且您不想更改它,则继续使用该值,否则如果'a'没有任何值,则使用'b'的值。
简单的话,如果左手边不为空,则指向现有的值,否则指向右边的值。
irb(main):001:0> a = 1
=> 1
irb(main):002:0> a ||= 2
=> 1
因为a已经被设为1了
irb(main):003:0> a = nil
=> nil
irb(main):004:0> a ||= 2
=> 2
因为a是nil
简而言之,||=b意味着:如果a是undefined、nil或false,则将b赋值给a。否则,保持a不变。