下面的代码在Ruby中是什么意思?
||=
它的语法有什么意义或原因吗?
下面的代码在Ruby中是什么意思?
||=
它的语法有什么意义或原因吗?
当前回答
还请记住||=不是原子操作,因此,它不是线程安全的。根据经验,不要将它用于类方法。
其他回答
简洁完整的回答
a ||= b
计算方法与下面每一行相同
a || a = b
a ? a : a = b
if a then a else a = b end
-
另一方面,
a = a || b
计算方法与下面每一行相同
a = a ? a : b
if a then a = a else a = b end
-
编辑:正如AJedi32在评论中指出的那样,这只在以下情况下成立:A是一个已定义变量。2. 计算一次时间和两次时间不会导致程序或系统状态的差异。
X ||= y表示
如果x有任何值,不要改变它的值,否则 将x设为y
b = 5
a ||= b
这句话的意思是:
a = a || b
这将是
a = nil || 5
所以最后
a = 5
现在如果你再调用这个:
a ||= b
a = a || b
a = 5 || 5
a = 5
b = 6
现在如果你再调用这个:
a ||= b
a = a || b
a = 5 || 6
a = 5
如果你观察,b的值不会被分配给a, a仍然有5。
它是Ruby中用来加快访问速度的一种记忆模式。
def users
@users ||= User.all
end
这句话的意思是:
@users = @users || User.all
第一次调用这个方法时,你会调用数据库。
以后对该方法的调用将只返回@users实例变量的值。
简而言之,||=b意味着:如果a是undefined、nil或false,则将b赋值给a。否则,保持a不变。
还请记住||=不是原子操作,因此,它不是线程安全的。根据经验,不要将它用于类方法。