为什么elsif在Ruby中没有条件的情况下工作?

时间:2014-02-09 21:14:42

标签: ruby

为什么elsif在没有通过评估条件的情况下工作?看起来这应该会破坏我的代码,但事实并非如此。使用没有条件的elsif在其他语言中断,为什么不使用Ruby?

x = 4

if x > 5
puts "This is true"
elsif
puts "Not true - Why no condition?"
end

返回

Not true - Why no condition?

在语句末尾添加else分支将返回else和elsif分支。

x = 4

if x > 5
puts "This is true"
elsif 
puts "Not true - Why no condition?"
else
puts "and this?"
end

返回

Not true - Why no condition?
and this?

感谢您帮助我理解这个怪癖。

3 个答案:

答案 0 :(得分:5)

这是因为您的代码实际上被解释为

if x > 5
  puts "This is true"
elsif (puts "Not true - Why no condition?")
end

同样在这里

if x > 5
  puts "This is true"
elsif (puts "Not true - Why no condition?")
else
  puts "and this?"
end
打印“不正确 - 为什么没有条件?”后,elsif中{p> puts返回nil,其中nilfalsy else"and this?"。因此,Not true - Why no condition?也会被触发,and this?也会被打印出来。因此,2输出{{1}}和{{1}}。

答案 1 :(得分:2)

因为puts用作测试表达式。 puts返回nil;控制权继续到下一个elsif / else

x = 4

if x > 5
    puts "This is true"
elsif (puts "Not true - Why no condition?")
end

答案 2 :(得分:1)

这与:

相同
if x > 5
  puts "This is true"
elsif puts "Not true - Why no condition?"
else
  puts "and this?"
end

puts中的elsif返回nil,这是一个错误值,因此会触发else