Ini berguna jika Anda mencoba membuat metode kelas secara metaprogram:
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
Jawaban saya untuk mengikuti ...
ruby
metaprogramming
class-method
Chinasaur
sumber
sumber
singleton_class.define_method
singleton_class.define_method :loudly do |message|
dll.?Saya lebih suka menggunakan send to call define_method, dan saya juga suka membuat metode metaclass untuk mengakses metaclass:
sumber
metaclass
, jadi senang mengetahui singkatan yang mudah dan berdiri sendiri.Ini adalah cara termudah di Ruby 1.8+:
sumber
Berasal dari: Jay and Why , yang juga memberikan cara untuk membuat ini lebih cantik.
Pembaruan : dari kontribusi VR di bawah ini; metode yang lebih ringkas (selama Anda hanya mendefinisikan satu metode dengan cara ini) yang masih berdiri sendiri:
tetapi perhatikan bahwa menggunakan send () untuk mengakses metode privat seperti define_method () belum tentu merupakan ide yang baik (pemahaman saya adalah bahwa ini akan hilang di Ruby 1.9).
sumber
Untuk digunakan di Rails jika Anda ingin mendefinisikan metode kelas secara dinamis dari perhatian:
sumber
Anda juga dapat melakukan sesuatu seperti ini tanpa bergantung pada define_method:
sumber