> I was looking at this bit of code within Rails:
> 
> # File actionpack/lib/action_controller/metal/flash.rb, line 12
> def redirect_to(options = {}, response_status_and_flash = {}) #:doc:
>  if alert = response_status_and_flash.delete(:alert)
>    flash[:alert] = alert
>  end
> 
>  if notice = response_status_and_flash.delete(:notice)
>    flash[:notice] = notice
>  end
> 
>  if other_flashes = response_status_and_flash.delete(:flash)
>    flash.update(other_flashes)
>  end
> 
>  super(options, response_status_and_flash)
> end
> 
> And I thought: ouch, aren't those supposed to be double-equals?  Well,
> no, it's an assignment within an if statement.  It saves a line of
> code per usage, thus three lines of code in that method.
> 
> But I thought: wow, that sure violates the principle of least
> surprise.  Perhaps it would be nice if there were a way to reference
> the most recent if-expression.  I recall how a lone underscore in irb
> will contain the value of whatever was last evaluated.  So perhaps
> something like this would be nice:
> 
>  if response_status_and_flash.delete(:notice)
>    flash[:notice] = _
>  end
> 
> instead of what we see above:
> 
>  if notice = response_status_and_flash.delete(:notice)
>    flash[:notice] = notice
>  end

Interesting, but I think using _ is even more surprising isn't it?  What 
happens when you have this...

if something-that-returns-a-value-and-passes-the-if-test
  if something-that-returns-a-value-but-fails-the-if-test
    # never happens
  else
    # what does _ reference?  The very top level if?  Or the second one?  
    # Both were evaluated, but one failed so does it count towards _ or not?
    # How do I access the first _ if Ruby decides _ is the second one?  
  end
end

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to