Jest to przydatne, jeśli próbujesz utworzyć metody klas metaprogramowo:
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
Moja odpowiedź do naśladowania ...
ruby
metaprogramming
class-method
Chinasaur
źródło
źródło
singleton_class.define_method
singleton_class.define_method :loudly do |message|
itd.?Wolę używać send to call define_method, a także lubię tworzyć metodę metaklasy, aby uzyskać dostęp do metaklasy:
źródło
metaclass
, więc dobrze jest znać proste, samodzielne skróty.Oto najprostszy sposób w Rubim 1.8+:
źródło
Pochodzi z: Jay and Why , którzy również zapewniają sposoby na uczynienie tego ładniejszym.
Aktualizacja : z wkładu VR poniżej; bardziej zwięzła metoda (o ile w ten sposób definiujesz tylko jedną metodę), która jest nadal samodzielna:
ale zauważ, że używanie send () do uzyskiwania dostępu do prywatnych metod, takich jak define_method (), niekoniecznie jest dobrym pomysłem (rozumiem, że w Rubim 1.9 nie ma go).
źródło
Do użycia w Railsach, jeśli chcesz dynamicznie definiować metody klas na podstawie problemów:
źródło
Możesz także zrobić coś takiego bez polegania na define_method:
źródło