使用'&&'是否安全结合2个条件?

时间:2014-04-09 15:34:44

标签: ruby if-statement

我想测试2个条件以执行一些代码。 这两个条件是@page@page.content

的存在

如果@page.content首先没有@page,那么@page显然不会存在。如果nil content nil if @page && @page.contentif @page if @page.content ... 类不存在

,那么它会给我一个例外情况

所以最后我的问题是:将条件指定为@page.content是否总是安全的?

或者我们应该确保将它们分成两行

@page

由于解释器(或其他语言的编译代码)可能会在第一个条件({{1}})之前评估第二个条件({{1}})

感谢您的澄清!

2 个答案:

答案 0 :(得分:4)

似乎你误解了布尔条件的评估方式。这是非常严格的:

  • 表达式从从左到右进行评估。
  • 如果任何条件失败,其余部分被忽略

这意味着:

if (@page && @page.content)

如果@page在逻辑上不正确,即falsenil,那么评估就会停止。 @page.content未被调用。

这称为short circuit evaluation,在大多数编程语言中都是一个非常标准的功能。

还有其他添加相同逻辑的方法。在Ruby中你可以这样做:

@page.try(:content)

当且仅当content存在时,才会调用@page

答案 1 :(得分:2)

使用if @page && @page.content是安全的,因为if语句的第一部分,无论@page是否存在,都将首先确定。如果没有,整个语句将失败,永远不会评估@page.content。您不必担心@page为nil会抛出错误。