没有条件的if-elsif在Ruby中没有正确分支

时间:2017-10-24 11:54:03

标签: ruby if-statement

当我运行以下代码时:

if  
  puts "A"  
elsif  
  puts "B"  
end  

我得到了输出:

A
B

为什么不警告或引发任何错误?为什么它会执行两个分支?

2 个答案:

答案 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