为什么这个Ruby'if'表现不如预期?

Jam*_*ore 1 ruby

我确定我在这里遗漏了一些东西,但也是如此.

foo['bar'] = nil

if(foo['bar'] == nil)
   puts "foo bar is nil :("
Run Code Online (Sandbox Code Playgroud)

但是,没有任何反应?有什么想法吗?

mik*_*kej 10

你需要一个end声明来关闭你的ifie

if(foo['bar'] == nil)
   puts "foo bar is nil :("
end
Run Code Online (Sandbox Code Playgroud)

请注意,有一种nil?方法可以检查某些内容是否存在,nil并且您的条件周围的括号不是必需的,因此Ruby会更加惯用:

if foo['bar'].nil?
  puts "foo bar is nil :("
end
Run Code Online (Sandbox Code Playgroud)

正如Arkku评论的那样,单行if可以简洁地写成:

puts "foo bar is nil :(" if foo['bar'].nil?
Run Code Online (Sandbox Code Playgroud)

哪个更好取决于上下文(例如,您是想强调条件还是强调条件为真时会发生什么)以及一定程度的个人偏好.但作为一个例子,你可能会在方法的开头加上一个保护条件,例如

raise "bar needed" if foo['bar'].nil?
Run Code Online (Sandbox Code Playgroud)

  • +1,但作为一个额外的注释,在Ruby中,提问者可能想要简洁的单行"if",如果foo ['bar'],可以写成`puts'nil'.nil? (3认同)