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


#1

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.


#2

“heinous (sent by Nabble.com)” removed_email_address@domain.invalid wrote in message
news:removed_email_address@domain.invalid…

@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

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

#3

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


#4

“heinous (sent by Nabble.com)” removed_email_address@domain.invalid wrote in message
news:removed_email_address@domain.invalid…

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

#5

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.