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

Where the method name is the @attr value.

“heinous (sent by Nabble.com)” [email protected] wrote in message
news:[email protected]

@tmphash = Hash.new
for object in @objects
if ! @tmphash.has_key?([email protected]_s)
@tmphash[[email protected]_s] = Array.new
end
@tmphash[[email protected]_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

“heinous (sent by Nabble.com)” [email protected] wrote in message
news:[email protected]

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.