Comment puis-je faire ce dont ils parlent ici , mais en Ruby?
Comment feriez-vous la fonction sur un objet? et comment feriez-vous une fonction globale (voir la réponse de jetxee 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 obtenez-vous les méthodes globales? ou mes fonctions globales?
J'ai essayé cette ligne supplémentaire
puts methods
et load et row_change ne figurant pas dans la liste.
ruby
metaprogramming
BuddyJoe
la source
la source
Trois façons:
send
/call
/eval
- et leurs points de repèreAppel typique (pour référence):
En utilisant
send
En utilisant
call
En utilisant
eval
Benchmarks
Le mérite revient à cet article de blog qui explique un peu plus les trois méthodes et montre également comment vérifier si les méthodes existent.
la source
Class.send("classVariable") = 5
? Cela jette une erreur. Y a-t-il un moyen de contourner cela? La même chose est vraie pour l'utilisationClass.method("classVariable").call() = 5
call
inclure l'instanciation de la méthode object (m.test.method(:length)
) pour représenter avec précision son temps réel? Lors de l'utilisation,call
vous allez probablement instancier l'objet de méthode à chaque fois.Utilisez ceci:
Simple, non?
En ce qui concerne le global , je pense que la méthode Ruby serait de le rechercher en utilisant la
methods
méthode.la source
"my_string".method('blah') #=> NameError: undefined method
bla 'pour la classeString'
Personnellement, je configurerais un hachage pour les références de fonction, puis j'utiliserais la chaîne comme index du hachage. Vous appelez ensuite la référence de fonction avec ses paramètres. Cela a l'avantage de ne pas permettre à la mauvaise chaîne d'appeler quelque chose que vous ne voulez pas appeler. L'autre moyen consiste essentiellement à utiliser
eval
la chaîne. Ne faites pas cela.PS ne soyez pas paresseux et tapez votre question entière, au lieu de créer un lien vers quelque chose.
la source