Wie kann ich das tun , was sie reden hier , aber in Ruby?
Wie würden Sie die Funktion für ein Objekt ausführen? und wie würden Sie eine globale Funktion ausführen (siehe die Antwort von jetxee auf den genannten Beitrag)?
BEISPIELCODE:
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()
UPDATE: Wie kommen Sie zu den globalen Methoden? oder meine globalen Funktionen?
Ich habe diese zusätzliche Zeile ausprobiert
puts methods
und load und row_change wurden nicht aufgelistet.
ruby
metaprogramming
BuddyJoe
quelle
quelle
Drei Wege:
send
/call
/eval
- und ihre BenchmarksTypischer Aufruf (als Referenz):
Verwenden von
send
Verwenden von
call
Verwenden von
eval
Benchmarks
Dank geht an diesen Blog-Beitrag, in dem die drei Methoden etwas näher erläutert werden und in dem auch gezeigt wird, wie überprüft wird, ob die Methoden vorhanden sind.
quelle
Class.send("classVariable") = 5
? Das wirft einen Fehler. Gibt es einen Weg daran vorbei? Das Gleiche gilt für die VerwendungClass.method("classVariable").call() = 5
call
Instanziieren des Methodenobjekts (m.test.method(:length)
) umfassen, um dessen wahre Zeit genau darzustellen? Bei Verwendung werdencall
Sie das Methodenobjekt wahrscheinlich jedes Mal instanziieren.Benutze das:
Einfach, richtig?
Was das Globale betrifft , denke ich, dass der Ruby-Weg darin besteht, es mit der
methods
Methode zu durchsuchen .quelle
"my_string".method('blah') #=> NameError: undefined method
bla 'für die KlasseString'
Persönlich würde ich einen Hash einrichten, um Referenzen zu funktionieren, und dann die Zeichenfolge als Index für den Hash verwenden. Anschließend rufen Sie die Funktionsreferenz mit ihren Parametern auf. Dies hat den Vorteil, dass die falsche Zeichenfolge nicht zulässt, dass etwas aufgerufen wird, das Sie nicht aufrufen möchten. Der andere Weg ist im Grunde
eval
die Zeichenfolge. Mach das nicht.PS: Sei nicht faul und schreibe deine ganze Frage ab, anstatt auf etwas zu verlinken.
quelle