2011-08-05 99 views
0

我的印象是,加入的条件与& &是顺序执行,使得下面将返回true:红宝石条件序列

a = "adasd" 
> b = a && b.present? 
=> false 

的思考?

谢谢! --Peter

  • 注:

    B = A => “adasd”

    b.present? =>真

回答

4

当你这样说:

b = a && b.present? 

你声明b作为一个局部变量,但它会nil,直到分配的右侧进行评估。特别是,bnil当你打电话present?上,并且会话将是虚假的b错误。

当你这样做:当你调用present?它让您从b.present?返回true

a = 'pancakes' 
b = a 
b.present? 

b将具有值'pancakes'

+0

啊此相比。当然。那么正确:(b = a)&& b.present? –

0

作为每rails doc

本正在检查一个变量为非空白

按照分配定时,红宝石只要它认为它声明中的范围的变量,所以B将处于范围但没有价值,所以现在将返回false。

你也许应该用defined?

a = "abc" 
=> "abc" 
defined? a 
=> "local-variable" 
defined? b 
=> nil 
b = defined? b 
=> "local-variable"