В Ruby предположим, что у меня есть класс Foo
, чтобы позволить мне каталогизировать мою большую коллекцию Foos. Это фундаментальный закон природы, что все фоны являются зелеными и сферическими, поэтому я определил методы класса следующим образом:
class Foo
def self.colour
"green"
end
def self.is_spherical?
true
end
end
Это позволяет мне делать
Foo.colour # "green"
но не
my_foo = Foo.new
my_foo.colour # Error!
несмотря на то, что my_foo
явно зеленый.
Очевидно, я мог бы определить метод экземпляра colour
, который вызывает self.class.colour
, но это становится громоздким, если у меня много таких фундаментальных характеристик.
Я также могу, по-видимому, сделать это, определив method_missing
, чтобы попробовать класс для любых отсутствующих методов, но я не понимаю, что я должен делать, или уродливый взломать, или как сделать это безопасно (особенно как Я нахожусь под ActiveRecord в Rails, который, как я понимаю, делает некоторые умные забавные вещи с помощью метода_очистки).
Что вы порекомендовали бы?