||= 是啥意思? [复制]

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上的条件赋值 重要的是要意识到它也是短路的——如果afalse-ishb 将不会运行(例如,通过不进行昂贵的数据库查询来节省时间)。跨度> 不是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 表达式相等。

希望这有助于更好地理解||= 运算符。

【讨论】:

以上是关于||= 是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

||= 是啥意思? [复制]

“?”是啥意思?调用jsp时标记是啥意思? [复制]

";" 是啥意思?在“if”块内是啥意思? [复制]

=& 是啥意思? [复制]

JavaScript:“!!”是啥意思? [复制]

“应用程序框架”是啥意思? [复制]