Bug #12376
closed
No error for elseif condition
Added by dsferreira (Daniel Ferreira) almost 8 years ago.
Updated almost 8 years ago.
Description
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.
Replication:
$ 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.
- ruby -v changed from 2.30 to 2.3.0
It is parsed as
if a == 2
puts 2
elsif a == 3
puts 3
elseif(a == 1)
puts 1
else
puts 4
end
With elseif
being just a method call. With this branch not evaluated, there is no problem with unknown method in it.
- 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
Matz.
And most editors can high-light keywords, but not elseif
, as shown in this page, FYI.
- Status changed from Closed to Rejected
Of course.
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.
You may want to use a code lint tool, such as rubocop.
BTW, next quiz:
> a = 1
> if a == 2
> puts 2;
> elsif a == 3
> puts 3.
> elsif a == 1
> puts 1;
> else
> puts 0;
> end
0
=> nil
--
Yusuke Endoh mame@ruby-lang.org
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0Like0Like0