+1

Also had the need for something like this in the past.

Object#presence won't cut it when you're short-circuiting some part
of computation inside of the chained calls, for example this

@users.send(@admins_only ? :select : :presence, &:admin?).sort

will fail when @users array is blank.

Also isn't this function sort of OO version of
http://en.wikipedia.org/wiki/Identity_function ?

Btw. the use cases like this could be made even simpler by
adding/using Object#send_if

@users.send_if(@admins_only, :select, &:admin?).sort

And it looks like people have been doing this for quite a while
already :)

http://www.google.com/codesearch?q=lang%3Aruby+def%5Cssend_if

On Apr 11, 1:17 am, Josh Susser <j...@hasmanythrough.com> wrote:
> On Apr 9, 2010, at 4:26 AM, Joao Carlos wrote:
>
>
>
>
>
> > I just came across a situation where it would be extremely handy to
> > have a method that returns the receiver.
>
> > Imagine the following example:
>
> > filter = %w(with_votes without_votes).include?(params[:filter]) ?
> > params[:filter].to_sym : :self
> > Idea.published.send(filter).all
>
> > The implementation would be pretty simple:
>
> > class Object
> >  def self
> >    self
> >  end
> > end
>
> > Should this be a part of Rails?
>
> (somehow managed to forget to hit send on this one yesterday. sigh.)
>
> Smalltalk has a method Object#yourself which does just that.  The most  
> common use case is with cascaded message sends, but Ruby doesn't have  
> those.  I've wanted #yourself in Ruby now and then too.  Since Matz  
> was very familiar with Smalltalk when he created Ruby I assume he  
> didn't think it was necessary, but it's one of the questions I always  
> want to ask him but forget to when I get the chance.
>
> --
> Josh Susserhttp://blog.hasmanythrough.com

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To post to this group, send email to rubyonrails-c...@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-core+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en.

Reply via email to