在 Ruby 中,假设我有一个类Foo
可以让我对我的大量 Foos 集合进行分类。所有的 Foo 都是绿色和球形的,这是一个基本的自然规律,所以我定义了类方法如下:
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 中,我知道它用 method_missing 做了一些聪明有趣的东西)。
你会推荐什么?