2008/3/12, Fred Talpiot <fredistic / gmail.com>:

> [...]
>  puts 'ruby version: ' + RUBY_VERSION + ', ' + RUBY_RELEASE_DATE + ' for
>  ' + RUBY_PLATFORM
>
>  unless true
>   puts "wrong wrong"
>  elsunless false
>   puts 'weird, but logical'
>  elsunless true
>   puts 'truly strange'
>  else
>   puts 'weirder yet'  # This is what pops out!
>  end

elsunless is not a keyword in Ruby. Let's reformat your
code a little bit:

    unless true
      puts "wrong wrong"
      elsunless false
      puts 'weird, but logical'
      elsunless true
      puts 'truly strange'
      else
      puts 'weirder yet'  # This is what pops out!
    end

Syntax wise, Ruby sees the "elsunless" occurences here
as plain method calls. Since the unless condition is true,
the whole block gets never executed and there's no exception.

Let's compare in irb:

    irb(main):001:0> elsif true
    SyntaxError: compile error
    (irb):1: syntax error, unexpected kELSIF
    elsif true
         ^
            from (irb):1
    irb(main):002:0> elsunless true
    NoMethodError: undefined method `elsunless' for main:Object
            from (irb):2

Stefan