Это полезно, если вы пытаетесь создать методы класса метапрограммно:
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
Мой ответ, чтобы следовать ...
ruby
metaprogramming
class-method
Китайзавр
источник
источник
singleton_class.define_method
singleton_class.define_method :loudly do |message|
и т. Д.?Я предпочитаю использовать send для вызова define_method, и мне также нравится создавать метод метакласса для доступа к метаклассу:
источник
metaclass
, поэтому хорошо знать простую, автономную стенографию.Это самый простой способ в Ruby 1.8+:
источник
Произведено от: Jay and Why , которые также предлагают способы сделать это красивее.
Обновление : из вклада VR ниже; более сжатый метод (пока вы определяете только один метод таким образом), который все еще является автономным:
но обратите внимание, что использование send () для доступа к частным методам, таким как define_method (), не обязательно является хорошей идеей (я понимаю, что это исчезнет в Ruby 1.9).
источник
Для использования в Rails, если вы хотите динамически определять методы класса из соображений безопасности:
источник
Вы также можете сделать что-то подобное, не полагаясь на define_method:
источник