【问题标题】:combining two if conditions in one line在一行中合并两个 if 条件
【发布时间】:2014-07-30 07:10:18
【问题描述】:

我有一个哈希值:

request.session["flash"]["alert"]

我需要为上述哈希值写一个if 条件,例如:

if request.session["flash"]
  if request.session["flash"]["alert"]
    #Do something
  end
end

我想将两个if 条件组合在一行中,例如:

if request.session["flash"] && request.session["flash"]["alert"]
  #do something
end 

但是如果flash 不存在,这会抛出一个 nil 类错误。如何在一行中编写两个 if 条件,如果其中一个条件通过则执行另一个条件?

【问题讨论】:

  • 很确定 if request.session["flash"] && request.session["flash"]["alert"] 不应该抛出一个 nil 类错误......相反,它应该评估为 if当 flash 不存在时为零,这将被评估为 false
  • 这一行应该可以工作,如果session['flash'] 为nil,则第二个条件永远不会运行
  • if request.session['flash'].try(:[], 'alert') 应该可以工作
  • 你是说这抛出nil类错误吗?或者您是说这确实 抛出了nil 类错误?如果它确实,那么确切的错误是什么?
  • 为什么不使用flash[:alert] 访问闪存?

标签: ruby-on-rails ruby conditional


【解决方案1】:

您是否测试了您的第二个 sn-p?据我所知,Ruby 对 if 条件使用惰性求值。如果第一个条件为假,则不会评估第二个条件,因此 [] 方法甚至不会在 nil 对象上调用。

来源:http://strugglingwithruby.blogspot.com/2008/11/conditional-statements.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-11
    • 2020-10-19
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多