【发布时间】:2014-08-05 07:30:21
【问题描述】:
我知道单例类是什么。单例类用于保存为对象定义的单例方法。元类和单例类是一样的吗?谁能解释一下什么是元类?关于元类的一些信息给出了单例类的例子。两者是同一事物还是相互关联?
【问题讨论】:
我知道单例类是什么。单例类用于保存为对象定义的单例方法。元类和单例类是一样的吗?谁能解释一下什么是元类?关于元类的一些信息给出了单例类的例子。两者是同一事物还是相互关联?
【问题讨论】:
在书 - The Ruby Programming Language 第 257 页中,Matz 解释了您的问题如下:
对象的单例方法是与该对象关联的匿名eigenclass 的实例方法。 “Eigen”是一个德语单词,意思是(大致)“自我”、“自己的”、“特定的”或“特征的”。 eigenclass 也称为 单例类或(不太常见的)元类。 “eigenclass”一词在 Ruby 社区内并未被统一接受,但我们将在本书中使用它。
【讨论】:
我认为元类是一些人将单例类称为非官方的方式。除了单例类,eigenclass 是它的另一个官方名称。
【讨论】:
长期以来,现在被称为“单例类”的东西没有正式名称。人们称它为各种不同的东西,包括但不限于:
这些都是指同一个东西。
但是,其中一些已经具有确定的含义。例如,“元类”在 OO 中,特别是在 Smalltalk 中已经有了一个含义,它的含义与它曾经在 Ruby 中的使用方式不同,这会导致混淆,尤其是考虑到 Ruby 与 Smalltalk 的密切关系。
同样,“虚拟类”有不同的含义。 (此外,该术语也用于 YARV 源代码中的第三个概念。)
【讨论】:
module?