我確定我在這裏失去了一些東西,但沒有更少。爲什麼這個Ruby'if'不像預期的那樣行爲?
foo['bar'] = nil
if(foo['bar'] == nil)
puts "foo bar is nil :("
但是,什麼都沒有發生?有什麼想法嗎?
我確定我在這裏失去了一些東西,但沒有更少。爲什麼這個Ruby'if'不像預期的那樣行爲?
foo['bar'] = nil
if(foo['bar'] == nil)
puts "foo bar is nil :("
但是,什麼都沒有發生?有什麼想法嗎?
你需要一個end
語句關閉if
即
if(foo['bar'] == nil)
puts "foo bar is nil :("
end
注意,有用於檢查nil?
方法,如果事情是nil
和周圍的條件括號內是沒有必要的,因此會更地道紅寶石寫:
if foo['bar'].nil?
puts "foo bar is nil :("
end
作爲Arkku評論的,一個單一的線if
可以簡明地寫成:
puts "foo bar is nil :(" if foo['bar'].nil?
哪個更好取決於上下文(例如,你想強調一下情況還是強調如果條件是真的會發生什麼情況)以及一定的個人偏好。但是,作爲一個例子,您可能會在方法開始時提供警戒條件,例如,
raise "bar needed" if foo['bar'].nil?
irb(main):002:0> foo = {}
=> {}
irb(main):003:0> foo['bar'] = nil
=> nil
irb(main):004:0> foo['bar']
=> nil
irb(main):005:0> if foo['bar'] == nil
irb(main):006:1> puts "foo bar nil"
irb(main):007:1> end
foo bar nil
=> nil
零是把它酷似一個條件爲假。所以你不需要測試,如果你的變量真的是零。
foo = {}
foo['bar'] = nil
puts "foo bar is nil :(" unless foo['bar']
puts "foo bar is nil :(" if !foo['bar']
在ruby中,只有nil和false在條件語句中返回false。
問題是紅寶石本身(不會進入細節),但標記爲答案,因爲那裏有一些非常好的迴應。 – 2010-04-01 21:22:08