为什么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?
感谢您帮助我理解这个怪癖。
答案 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
,其中nil
是falsy
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
。