单例类和元类

时间:2014-06-15 07:05:42

标签: ruby singleton metaclass

我知道单身人士课是什么。 Singleton类用于保存为对象定义的单例方法。元类和单例类是一样的吗?任何人都可以解释什么是元类?关于元类的一些信息给出了单例类的例子。两者是相同的还是以某种方式彼此相关?

3 个答案:

答案 0 :(得分:4)

在第257页的 Ruby Programming Language 一书中, Matz 解释了你的问题,如下所示:

  

对象的单例方法是与该对象关联的匿名本征类的实例方法。 “Eigen”是一个德语单词,意思是(大致)“自我”,“拥有”,“特定”或“特征”。 eigenclass 也称为< em> singleton class 或(不太常见)元类术语“本征类”在Ruby社区中并未被统一接受,但它是我们将在本书中使用的术语。

答案 1 :(得分:2)

我认为元类是一种非官方的方式,有些人将单例类称为。除了单身类,eigenclass是它的另一个官方名称。

答案 2 :(得分:1)

很长一段时间,现在所谓的&#34;单身类&#34;没有官方名称。人们称它为各种不同的东西,包括但不限于:

  • 单身类
  • eigenclass
  • 元类
  • 虚拟课程
  • 幽灵班
  • 影子课

这些都是指同一件事。

然而,其中一些已经确立了意义。 &#34;元类&#34;例如,已经在OO中具有一般意义,特别是在Smalltalk中,它意味着与曾经在Ruby中使用它的方式不同,这会导致混淆,特别是考虑到Ruby与Smalltalk的密切关系。

同样,&#34;虚拟课程&#34;意味着不同的东西(此外,该术语也在YARV源代码中用于第三个概念。)