【发布时间】:2011-12-16 09:35:13
【问题描述】:
最近,我在研究 Ruby 中类的一些细节,对类的定义感到困惑。
在Ruby中,类定义如下,
class A
def self.my_method
end
end
和它一样
class A
class << self
def my_method
end
end
end
然后我就糊涂了。对于第一种情况,self可以看成是一个指向当前使用对象的指针,上下文的当前类是A。方法查找是递归完成的。但我的问题是,def 是做什么的?它如何改变当前对象和上下文?第二种情况的问题是一样的。 class 之类的描述如何改变当前对象和上下文?
还有一个问题。据我所知,所有 Class 对象都遵循 Fly-weight 等设计模式,因为它们共享具有相同定义的相同 Class 对象。然后特征类变得混乱。既然eigenclass中的def其实是用Class对象定义了一个方法,怎么会和“def self.*”有关联呢?
从外面看起来太复杂了,我可能需要Ruby的设计细节。
【问题讨论】:
-
实际上我并没有让您感到困惑... self 是单例类实例,因此
def self.foobar声明了一个类方法,而def foobar声明了一个实例方法,其中 self 是当前实例。至于你的情况......他们不应该是一样的吗? (您正在声明类方法)
标签: ruby class metaclass eigenclass