当我运行以下代码时:
if
puts "A"
elsif
puts "B"
end
我得到了输出:
A
B
为什么不警告或引发任何错误?为什么它会执行两个分支?
答案 0 :(得分:19)
没有条件的if-elsif
这是你错的地方。 puts
条件。该片段中没有实体,只有条件。
这是您的代码,格式正确。
if puts "A"
elsif puts "B"
end
为什么它会执行两个分支?
puts
返回nil,一个假值。这就是它尝试两个分支的原因。如果此代码有else
,则也会执行。
答案 1 :(得分:2)
换句话说:
if # this is the condition :
puts "A" # an expression which prints A and returns nil
# hence it's like "if false", try elsif ...
then
puts 'passes in then'
elsif # this is another condition :
puts "B" # puts prints B and returns nil
else # no condition satisfied, passes in else :
puts 'in else'
end
执行:
$ ruby -w t.rb
A
B
in else