2011-11-07 10 views
33

Ho due metodi definiti nel mio file ruby.Ruby converte la stringa nel nome del metodo

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

Una matrice contenente i nomi dei metodi.

methods = ["is_mandatory", "is_alphabets"] 

Quando faccio la seguente

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

E 'solo mostra is_alphabets, is_mandatory ("abc") ("abc"), piuttosto che in realtà si chiama il metodo.

Come posso convertire la stringa in nome metodo? Qualsiasi aiuto è molto apprezzato.

Saluti !!

+3

Una nota a parte, il modo di fare di Ruby metodi is_ * è quello di utilizzare un punto di domanda, piuttosto che il prefisso "è", vale a dire 'obbligatoria?' E 'alfabeti?'. –

risposta

50

Il modo migliore è probabilmente:

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

Vedi Object#send

+0

Grazie, ha funzionato! – verdure

+0

Se questi metodi appartengono ad alcune classi? –

+2

Quindi vuoi qualcosa come: 'obj = OwningClass.new; methods.each {| meth | obj.send (meth, 'abc')} ' – Chowlett

12

Prova utilizzando "Invia".

methods.each do |method| 
    self.send(method, "abc") 
end 
Problemi correlati