No error for elseif condition
Something I have been for a long time wondering about.
I don't know if this is a parsing problem or not but for me it seems like it is.
$ irb > RUBY_VERSION => '2.3.0' > a = 1 > if a == 2 > puts 2 > elsif a == 3 > puts 3 > elseif a == 1 > puts 1 > else > puts 0 > end 0 => nil
Shouldn't we have a parse error triggered here?
We can replace elseif for any other instruction like foo for instance.
I believe this behaviour is around for a long time.
Updated by matz (Yukihiro Matsumoto) almost 4 years ago
- Status changed from Open to Closed
it's parsed like
a = 1 if a == 2 puts 2 elseif(a==1) puts 1 else puts 0 end
and the method
elseif is not called in the false condition.
But you can find this kind of bugs using rubocop or other tools
Updated by dsferreira (Daniel Ferreira) almost 4 years ago
Makes perfect sense.
I would say the way to handle this bugs in a pro-active way would be to use 100% coverage in the test suite.
I can not see how the bug would be missed with that.
TDD as a must in ruby like always.
Thank you for the enlightenment Sirs.