下面的代码在Ruby中是什么意思?
||=
它的语法有什么意义或原因吗?
下面的代码在Ruby中是什么意思?
||=
它的语法有什么意义或原因吗?
当前回答
如果X没有值,它将被赋值为y,否则,它将保留它的原始值,在本例中为5:
irb(main):020:0> x = 5
=> 5
irb(main):021:0> y = 10
=> 10
irb(main):022:0> x ||= y
=> 5
# Now set x to nil.
irb(main):025:0> x = nil
=> nil
irb(main):026:0> x ||= y
=> 10
其他回答
x ||= y
is
x || x = y
"如果x为假或未定义,则x指向y"
还请记住||=不是原子操作,因此,它不是线程安全的。根据经验,不要将它用于类方法。
假设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之前未初始化时触发。
ruby-lang语法。正确的答案是查看ruby-lang文档。所有其他解释都令人困惑。
谷歌
"ruby-lang文档缩写赋值"。
Ruby-lang文档
https://docs.ruby-lang.org/en/2.4.0/syntax/assignment_rdoc.html#label-Abbreviated+Assignment
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