Evaluating the string in a variable to use as a method name

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?(object.@attr.to_s)
        @tmphash[object.@attr.to_s] = Array.new
      end
      @tmphash[object.@attr.to_s].push(object)
    end
  end

Where the method name is the @attr value.

···

--
View this message in context: http://www.nabble.com/Evaluating-the-string-in-a-variable-to-use-as-a-method-name-t1292849.html#a3440567
Sent from the ruby-talk forum at Nabble.com.

"heinous (sent by Nabble.com)" <lists@nabble.com> wrote in message news:3440567.post@talk.nabble.com...

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?(object.@attr.to_s)
       @tmphash[object.@attr.to_s] = Array.new
     end
     @tmphash[object.@attr.to_s].push(object)
   end
end

You cannot use @attr, @attr is reserved for instance variables. Also, it's a bad idea to use instance variables (@tmparray, @tmphash) as temporary variables.

Where the method name is the @attr value.

It's a one liner:

objects.sort_by {|o| o.send(attr)}

Kind regards

    robert

You cannot use @attr, @attr is reserved for instance variables. Also, it's
a bad idea to use instance variables (@tmparray, @tmphash) as temporary
variables.

Gotcha there, I wasn't planning to, it was more to make the variable more
obvious in the example.

It's a one liner:
objects.sort_by {|o| o.send(attr)}

Exactly what I needed, thanks... Now we're just looking at something like:

  def sort_obj(objects,attr)
    objects.sort_by {|o| o.send(attr)}
  end

···

--
View this message in context: http://www.nabble.com/Evaluating-the-string-in-a-variable-to-use-as-a-method-name-t1292849.html#a3442515
Sent from the ruby-talk forum at Nabble.com.

"heinous (sent by Nabble.com)" <lists@nabble.com> wrote in message news:3442515.post@talk.nabble.com...

You cannot use @attr, @attr is reserved for instance variables. Also, it's
a bad idea to use instance variables (@tmparray, @tmphash) as temporary
variables.

Gotcha there, I wasn't planning to, it was more to make the variable more
obvious in the example.

It's generally preferred to use pieces of code that are syntactically correct and do something. That makes everyone's lives easier. :slight_smile:

It's a one liner:
objects.sort_by {|o| o.send(attr)}

Exactly what I needed, thanks... Now we're just looking at something like:

def sort_obj(objects,attr)
   objects.sort_by {|o| o.send(attr)}
end

Not really worth a method IMHO bur YMMV.

Kind regards

    robert

It's generally preferred to use pieces of code that are syntactically
correct and do something. That makes everyone's lives easier. :slight_smile:

Thanks, I will do so in the future. Sorry about confusion that I may have
caused.

def sort_obj(objects,attr)
   objects.sort_by {|o| o.send(attr)}
end

Not really worth a method IMHO bur YMMV.

Yeah, suspect you're right there too, but it helps code readibility for me
as I'm still learning.

Anyway, thanks again for your help, it works like a charm.

···

--
View this message in context: http://www.nabble.com/Evaluating-the-string-in-a-variable-to-use-as-a-method-name-t1292849.html#a3457259
Sent from the ruby-talk forum at Nabble.com.