Если obj
имеет суперкласс, вы можете добавить методы к obj
из суперкласса, используя define_method
(API) , как вы упомянули. Если вы когда-нибудь посмотрите на исходный код Rails, вы заметите, что они делают это совсем немного.
Кроме того, хотя это не совсем то, о чем вы просите, вы можете легко создать впечатление, что создаете почти бесконечное число методов динамически, используя method_missing
:
def method_missing(name, *args)
string_name = name.to_s
return super unless string_name =~ /^expected_\w+/
# otherwise do something as if you have a method called expected_name
end
Добавление этого к вашему классу позволит ему отвечать на любой вызов метода, который выглядит как
@instance.expected_something