【发布时间】:2012-09-07 22:58:28
【问题描述】:
好的,所以我正在尝试在 Ruby 中进行一些元编程,但我有点困惑。根据我读过的几篇文章(如this one),为了给Ruby类动态添加类方法,你必须使用类的单例类:
class Klass
end
class << Klass
self.define_method(:foo) { return "foo" }
end
为什么会这样,和这有什么不同?
class Klass
self.define_method(:foo) { return "foo" }
end
(对不起,如果这个问题包含任何错误的假设。就像我说的,我有点困惑。)
【问题讨论】:
-
我认为你应该用 Eigenclass 替换单例。另见stackoverflow.com/questions/1630815/…。已经有一个Stackoverflow-tag 了。
-
啊,对了,我忘了它也可以叫Eigenclass。我有什么理由想在“单例类”或“元类”上使用该术语吗?
-
AFAIK "Metaclass" 没问题,但 Singleton 不同。
-
@knut 但它是一个单例类:
(class << Klass; self; end).new=>TypeError: can't create instance of singleton class -
单例类只能有一个实例。特征类只有一个实例(类)。所以一个 Eigenclass 是一个 Singleton 类 - 但不是每个 Singleton 都是一个 Eigenclass。所以我不会在你的具体情况下谈论单例。
标签: ruby eigenclass