Hi --

On Thu, 14 Jun 2007, Francisco Laguna wrote:

> Hi List!
>
> I just stumbled upon some interesting behaviour of case when and wanted
> to ask a few things about it. It looks like the "case when" construct
> executes a method when one leaves a out a newline (or semi-colon, I
> guess) after the when differentiation. Consider these to programs:
>
> === program 1 ===
>
> def hello
>  "Hello World!"
> end
>
> def good_day
>  "Good Day, World!"
> end
>
> greeting = "Hello"
>
> puts case greeting
> when "Hello"
>  :hello
> when "Good Day"
>  :good_day
> end
>
> === program 2 ===
>
> def hello
>  "Hello World!"
> end
>
> def good_day
>  "Good Day, World!"
> end
>
> greeting = "Hello"
>
> puts case greeting
> when "Hello" :hello
> when "Good Day" :good_day
> end
>
> ==============
>
> The first just prints out the symbols turned to strings ("hello" or
> "good_day", respectively), but the second one acrually executes the
> hello and good_day methods and the case block has the return value of
> the methods as its own value. Pretty cool, if you ask me. How come? Is
> that something I can rely on, or something that might disappear, because
> it's just some side-effect?

I believe it's being parsed as:

   when "Hello": hello

Note the : which can also separate the when part from the value.

Don't be disappointed.  It would be beyond bizarre if a symbol
suddenly decided to be a method call because of something like which
line it was written on.


David

-- 
* Books:
   RAILS ROUTING (new! http://safari.awprofessional.com/9780321509246)
   RUBY FOR RAILS (http://www.manning.com/black)
* Ruby/Rails training
     & consulting:  Ruby Power and Light, LLC (http://www.rubypal.com)