将实例方法委托给类方法
在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
尝试任何丢失的方法的类做到这一点,但我不清楚这是否是我应该做的或丑陋的黑客攻击,或如何做到这一点安全(尤其是因为我确实下Rails中的ActiveRecord,我理解它使用method_missing做了一些聪明的乐趣。
你会推荐什么?
没有找到相关结果
已邀请:
8 个回复
暑袜眠退
我一般不喜欢使用
,但这应该是非常安全的。
磁辫覆氓
街茬
闪脖
有点难看,但比使用ѭ7更好。我会尝试将其他选项放在其他答案中......
舞备联
,颜色和球形的答案都是一样的吗?是
实例的属性,因此应该定义为实例方法而不是类方法。 但是我可以看到一些你想要这种行为的情况,例如:如果你的系统中有
,所有这些都是蓝色的,你会在你的代码中的某个地方通过一个类,并想知道在你上课之前调用
之前实例的颜色。 另外,你是正确的,ActiveRecord确实广泛使用
,例如对于动态查找器,所以如果你沿着那条路走下去,你需要确保你的method_missing从超类中调用一个,如果它确定方法名称不是它可以自己处理的那个。
娠频摩
雇砰
屑凉赦