Dies ist nützlich, wenn Sie versuchen, Klassenmethoden metaprogrammatisch zu erstellen:
def self.create_methods(method_name)
# To create instance methods:
define_method method_name do
...
end
# To create class methods that refer to the args on create_methods:
???
end
Meine Antwort folgt ...
ruby
metaprogramming
class-method
Chinasaurier
quelle
quelle
singleton_class.define_method
singleton_class.define_method :loudly do |message|
usw.?Ich bevorzuge send, um define_method aufzurufen, und ich möchte auch eine Metaklassenmethode erstellen, um auf die Metaklasse zuzugreifen:
quelle
metaclass
ist es schön, die einfache, eigenständige Kurzform zu kennen.Dies ist der einfachste Weg in Ruby 1.8+:
quelle
Abgeleitet von: Jay und Why , die auch Möglichkeiten bieten, dies schöner zu machen.
Update : aus dem Beitrag von VR unten; Eine präzisere Methode (solange Sie nur eine Methode auf diese Weise definieren), die immer noch eigenständig ist:
Beachten Sie jedoch, dass die Verwendung von send () für den Zugriff auf private Methoden wie define_method () nicht unbedingt eine gute Idee ist (nach meinem Verständnis wird sie in Ruby 1.9 nicht mehr verwendet).
quelle
Zur Verwendung in Rails, wenn Sie Klassenmethoden dynamisch aus Bedenken definieren möchten:
quelle
Sie können auch so etwas tun, ohne sich auf define_method zu verlassen:
quelle