Произведено от: Jay and Why , которые также предлагают способы сделать это красивее.
self.create_class_method(method_name)
(class << self; self; end).instance_eval do
define_method method_name do
...
end
end
end
Обновление : из вклада VR ниже; более сжатый метод (пока вы определяете только один метод таким образом), который все еще является автономным:
self.create_class_method(method_name)
(class << self; self; end).send(:define_method, method_name) do
...
end
end
но обратите внимание, что использование send () для доступа к частным методам, таким как define_method (), не обязательно является хорошей идеей (я понимаю, что это исчезнет в Ruby 1.9).
singleton_class.define_method