2011-08-05 129 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"