В Ruby, предположим, у меня есть класс Foo
, который позволяет мне каталогизировать мою большую коллекцию Foos. Это фундаментальный закон природы, что все 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, который, как я понимаю, делает некоторые вещи Clever Fun Stuff с method_missing).
Что бы вы порекомендовали?