Получено от: Jay и Почему , которые также предоставляют способы сделать это красивее.
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).