Forum: Ruby on Rails Passing function names from string variables

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Leah C. (Guest)
on 2006-03-16 19:21
(Received via mailing list)
This may be a more generic Ruby question, so I'm going to ask on the
Ruby
forum, but I'm trying to figure out if there is a way to pass in the
string
value of a variable as the name of a method.

For example, I would like to do something like:

  def sort_obj_by_uid(objects,@attr)
    @tmparray = Array.new
    @tmphash = Hash.new
    for object in @objects
      if ! @tmphash.has_key?(removed_email_address@domain.invalid_s)
        @tmphash[removed_email_address@domain.invalid_s] = Array.new
      end
      @tmphash[removed_email_address@domain.invalid_s].push(object)
    end
  end

Where the method name is the @attr value.
unknown (Guest)
on 2006-03-16 19:25
(Received via mailing list)
Hi --

On Thu, 16 Mar 2006, Leah C. wrote:

>      if ! @tmphash.has_key?(removed_email_address@domain.invalid_s)
>        @tmphash[removed_email_address@domain.invalid_s] = Array.new
>      end
>      @tmphash[removed_email_address@domain.invalid_s].push(object)
>    end
>  end
>
> Where the method name is the @attr value.

Yes: send, like this:

   object.send(@attr).to_s

If you want to send additional arguments, you put them in the second,
third... positions.


David

--
David A. Black (removed_email_address@domain.invalid)
Ruby Power and Light, LLC (http://www.rubypowerandlight.com)

"Ruby for Rails" chapters now available
from Manning Early Access Program! http://www.manning.com/books/black
Justin B. (Guest)
on 2006-03-16 19:25
(Received via mailing list)
Very easy:

@obj.send(@attr.to_sym)
unknown (Guest)
on 2006-03-16 19:28
(Received via mailing list)
On Thu, 16 Mar 2006, removed_email_address@domain.invalid wrote:

>>  def sort_obj_by_uid(objects,@attr)
>> Where the method name is the @attr value.
>
> Yes: send, like this:
>
>  object.send(@attr).to_s

Whoops, I meant:

   object.send(@attr.to_s)


David

--
David A. Black (removed_email_address@domain.invalid)
Ruby Power and Light, LLC (http://www.rubypowerandlight.com)

"Ruby for Rails" chapters now available
from Manning Early Access Program! http://www.manning.com/books/black
This topic is locked and can not be replied to.