2011-11-07 13 views
33

Tengo dos métodos definidos en mi archivo ruby.Cadena de conversión de Ruby al nombre del método

def is_mandatory(string) 
     puts xyz 
end 
def is_alphabets(string) 
     puts abc 
end 

Una matriz que contiene los nombres de los métodos.

methods = ["is_mandatory", "is_alphabets"] 

Cuando hago lo siguiente

methods.each do |method| puts method.concat("(\"abc\")") end 

Simplemente muestra, is_mandatory is_alphabets ("ABC") ("ABC") en lugar de realmente una llamada al método.

¿Cómo puedo convertir la cadena al nombre del método? Cualquier ayuda es muy apreciada.

¡Salud!

+3

En una nota, la manera de hacer Rubí métodos Is_ * es mediante el uso de un signo de interrogación en lugar del prefijo "es", es decir, 'obligatoria?' Y 'alfabetos?'. –

Respuesta

50

La mejor manera es probablemente:

methods.each { |meth| send(meth, 'abc') } 

Ver Object#send

+0

¡Gracias que funcionó! – verdure

+0

Si estos métodos pertenecen a alguna clase? –

+2

Entonces quieres algo como: 'obj = OwningClass.new; methods.each {| meth | obj.send (meth, 'abc')} ' – Chowlett

12

Trate de usar "enviar".

methods.each do |method| 
    self.send(method, "abc") 
end 
Cuestiones relacionadas