我确定我在这里遗漏了一些东西,但也是如此。
foo['bar'] = nil
if(foo['bar'] == nil)
puts "foo bar is nil :("
但是,没有任何反应?有什么想法吗?
答案 0 :(得分:10)
您需要end
声明来关闭if
,即
if(foo['bar'] == nil)
puts "foo bar is nil :("
end
请注意,有一个nil?
方法可以检查某些内容是否为nil
,并且您的条件周围的括号不是必需的,因此可以写出更惯用的Ruby:
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?
答案 1 :(得分:2)
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。
答案 2 :(得分:1)
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