奇怪&&操作员行为?

时间:2014-04-06 01:06:30

标签: ruby-on-rails ruby

使用Ruby 2.1.1和Rails 3.2.13,我希望以下行返回true或false,但当href为nil时,hasHref设置为nil:

hasHref = (defined?(href) && !href.blank?)

我知道如何解决这个问题,但很奇怪为什么这不符合我的预期。它像我在Ruby 1.8.7中所期望的那样工作。

1 个答案:

答案 0 :(得分:4)

foo && bar不会返回truefalse。当foo foo 时,它会返回bar {/ 1}} >。 trueish 的定义:不是foonil

false永远不会返回defined?true,它会返回类型说明。如果未定义false,则href会返回defined?(href)(不是 trueish ),因此会返回nil

如果您确实需要niltrue将代码更改为:

false

有关hasHref = !!(defined?(href) && !href.blank?) 的可能返回值,请参阅:http://ruby-doc.com/docs/ProgrammingRuby/html/tut_expressions.html#UG