175 votes

Appel d'une fonction à partir d'une chaîne avec le nom de la fonction dans Ruby

Comment puis-je faire de quoi ils parlent ici, mais en Ruby?

Comment feriez-vous de la fonction sur un objet? et comment voulez-vous faire une fonction globale (voir jetxee de réponse sur le post mentionné)?

EXEMPLE DE CODE:

event_name = "load"

def load()
  puts "load() function was executed."
end

def row_changed()
  puts "row_changed() function was executed."
end 

#something here to see that event_name = "load" and run load()

Mise à JOUR: Comment faites-vous pour les méthodes globales? ou mes fonctions globales?

J'ai essayé cette ligne supplémentaire

puts methods

de charge et de row_change où elles ne sont pas répertoriées.

258voto

Colin Gravill Points 2100

Appeler des fonctions directement sur un objet

 a = [2, 2, 3]
a.send("length")
 

qui renvoie 3 comme prévu

ou pour une fonction de module

 FileUtils.send('pwd')
 

et une méthode définie localement

 def load()
    puts "load() function was executed."
end

send('load')
 

33voto

Tempus Points 22972

Utilisez ceci:

 > a = "my_string"
> meth = a.method("size")
> meth.call() # call the size method
=> 9
 

Simple, non?

En ce qui concerne le global , je pense que le moyen Ruby serait de le rechercher en utilisant la méthode methods .

12voto

khelll Points 12222

J'ai déjà traité de plusieurs manières pour l'appel de la méthode dynamique de Ruby . Regardez-les.

3voto

dlamblin Points 14546

Personnellement, je voudrais configurer un hachage en fonction des références et ensuite utiliser la chaîne comme un indice de la table de hachage. Vous appelez ensuite la fonction de référence avec ses paramètres. Ceci a l'avantage de ne pas laisser la mauvaise chaîne d'appeler quelque chose que vous ne souhaitez pas appeler. L'autre façon consiste pour l'essentiel à eval chaîne de caractères. Ne pas le faire.

PS ne pas être paresseux et de taper votre question, au lieu de le relier à quelque chose.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X