||= 是啥意思? [复制]
Posted
技术标签:
【中文标题】||= 是啥意思? [复制]【英文标题】:What does ||= mean? [duplicate]||= 是什么意思? [复制] 【发布时间】:2011-11-25 07:03:28 【问题描述】:我的应用程序控制器中有一个受保护的方法
def current_user
@current_user ||= User.find_by_id(session[:user_id])
end
我想知道||=
是什么意思?
我一直在尝试搜索并找出答案,但无济于事。
【问题讨论】:
不确定名称是否适用,但在 C# 中称为空合并运算符msdn.microsoft.com/en-us/library/ms173224.aspx 感谢大家帮助我,让我朝着正确的方向前进! 重复:What does||=
mean in Ruby?、What does ||=
mean in Ruby?、what is ||=
in ruby?、Double Pipe Symbols in Ruby Variable Assignment?、What does the “||=
” operand stand for in ruby、what does a ||=
mean in Ruby language?、Is the ruby operator ||=
intelligent? 可能还有很多其他的。
另见The definitive list of ||=
(OR Equal) threads and pages。
【参考方案1】:
||= 是一个红宝石习语。这意味着如果@current_user 为nil(或false),则尝试通过id 找到它并将其分配给@current_user,否则什么也不做。
看到这些relatedquestions。
【讨论】:
【参考方案2】:基本上,a ||= b
表示assign b to a if a is null or undefined or false (i.e. false-ish value in ruby)
,它是a = b unless a
的快捷方式。
【讨论】:
还可以查看Ruby Programming/Syntax/Operators上的条件赋值。 重要的是要意识到它也是短路的——如果a
是false-ish
,b
将不会运行(例如,通过不进行昂贵的数据库查询来节省时间)。跨度>
不是a = b unless a
。请参阅rubyinside.com/… 以更好地了解它的实际工作原理。
和a = b unless a
不一样。 a ||= b
总是返回 a
(如果适用,则在赋值之后),而如果 a
为真,a = b unless a
返回 nil
。这是一个非常重要的区别,因为这种机制通常用于缓存繁重的操作。【参考方案3】:
这是 Ruby 的一部分。
如果@current_user
为nil 或false,它将被设置为User.find_by_id(session[:user_id])
【讨论】:
【参考方案4】:注意与a += b
的相似之处,它等同于a = a + b
。
所以a ||= b
等价于a = a || b
。正如其他人提到的,这与a = b unless a
相同。
【讨论】:
实际上,如果a
不是false-ish
,Ruby 不应该赋值,因此a = a || b
并不严格等同于a = b unless a
。例如,如果a
恰好是Hash
,则可能会特别考虑其含义。
不,它不是,正如在 SO 上已经讨论过几次,在 Ruby 邮件列表上讨论过几十次,在无数博客文章中已经讨论过上百次。
哦,对了。你能举个例子说明什么时候不是这种情况吗?
和a = b unless a
不一样。 a ||= b
始终返回 a
(如果适用,则在赋值之后),而如果 a
为真,a = b unless a
返回 nil
。这是一个非常重要的区别,因为这种机制通常用于缓存繁重的操作。【参考方案5】:
在 ruby 中,'a ||= b' 被称为“或 - 等于”运算符。这是一个简短的说法,如果 a 的布尔值是 true(如果它既不是 false 也不是 nil),它的值就是 a。如果不是,则其值为 b。
【讨论】:
【参考方案6】:基本上,a ||= b 表示如果 a 为 null 或未定义,则将 b 分配给 a false (即 ruby 中的假值),它是 a = b 的快捷方式,除非 一个。
share|edit 于 2011 年 9 月 26 日 14:48 回答
罗曼 6,9711330
除了这个答案之外,还有一个例子 -
arr = nil || []
arr0 ||= []
arr <=> arr0 *#=> 0*
这意味着arr
表达式和arr0
表达式相等。
希望这有助于更好地理解||=
运算符。
【讨论】:
以上是关于||= 是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章