ruby - 我们什么时候在 Rails 中使用 "||="运算符?它的意义何在?

标签 ruby operators

<分区>

Possible Duplicate:
What does the operator ||= stands for in ruby?

我对 Rails 中 ||= 运算符的用法感到困惑。我在网上找不到任何有用的东西。谁能指导我?

如果您知道任何网络链接,请告诉我。

我想知道以下语句的含义:

@_current_user ||= session[:current_user_id] &&
      User.find(session[:current_user_id])

最佳答案

让我们分解一下:

@_current_user ||= {SOMETHING}

这就是说,如果 nilfalse,则将 @_current_user 设置为 {SOMETHING},或者不明确的。否则将其设置为 @_current_user,或者换句话说,什么也不做。扩展形式:

@_current_user || @_current_user = {SOMETHING}

好的,现在到右边。

session[:current_user_id] &&
      User.find(session[:current_user_id])

您通常会看到只有 bool 值的 &&,但是在 Ruby 中您不必这样做。这里的技巧是,如果 session[:current_user_id] 不为 nil,并且 User.find(session[:current_user_id]) 不为 nil,表达式将计算为 User.find(session[:current_user_id]) 否则为 nil。

所以用伪代码把它们放在一起:

if defined? @_current_user && @_current_user
  @_current_user = @_current_user
else
  if session[:current_user_id] && User.find(session[:current_user_id])
    @_current_user = User.find(session[:current_user_id])
  else
    @_current_user = nil
  end
end

关于ruby - 我们什么时候在 Rails 中使用 "||="运算符?它的意义何在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5691390/

相关文章:

ruby - 如何在 Ruby 中反转链表

c - 为什么 < 会比 <= 慢? [C]

f# - 如何定义 x++(其中 x : int ref) in F#?

ruby-on-rails - 如何在 update_attributes 期间以管理员身份跳过验证?

ruby-on-rails - 如何验证 Rails 中的重叠时间

ruby - 翻转 ruby​​ 哈希关联的内置方法

ruby-on-rails - 如何将所有选中的 check_box 值作为数组发布到 1 个字段?

operators - 是否可以在 Raku 中定义一个新的运算符并控制其优先级?

javascript - 为什么 typeof 称为运算符而不是函数?

delphi - Delphi 相当于向集合添加元素的 "+="是什么?