【问题标题】:using nil or [] on rails 2.3.8在 Rails 2.3.8 上使用 nil 或 []
【发布时间】:2010-11-15 20:02:05
【问题描述】:

我的 rails 应用程序 (2.3.8) 遇到了一个奇怪的情况

我想为控制器中的某个变量分配一个 no nil 值,所以我编写了以下代码:

@myValue = session[:value] or []

在我看来,我写道:

<%= @myvalue.size %>

当我显示我的页面时,我有一个 nil 错误。

我在 IRB 中尝试了 nil 或 [],得到了 []。所以我的问题是,是否有人知道为什么在 Rails 中工作方式不同?

P.S.:我使用的唯一 gem 是 cell 版本 3.3.3。

谢谢!

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    “或”关键字的优先级太低,此代码无法正常工作。使用“||”反而。为了证明这一点:

    ruby-1.9.2-p0 > a = nil or true; a
     => nil 
    ruby-1.9.2-p0 > a = nil || true; a
     => true 
    

    【讨论】:

      【解决方案2】:

      这是一个操作顺序。

      @myValue = (session[:value] or []) 可以。我相信@myValue = session[:value] or [] 被解释为(@myValue = session[:value]) or []。但是@myValue = session[:value] || [] 在没有括号的情况下也可以工作。 || 的优先级高于 or

      【讨论】:

        【解决方案3】:

        习语是做session[:value] || [],使用||,而不是or。你也可以试试session[:value].to_a。这是因为nil.to_a 变成了[]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多