Class类的文档有一个令人难以置信的混乱图,涉及"元类".我试图揭开这里实际发生的事情的神秘面纱.这三个词都是......
Ruby中的同义词?我知道元类在Python中意味着特定和不同的东西,例如,但在Ruby中呢?
Jör*_*tag 16
tl;博士:是的.
在过去,没有人知道该怎么称呼他们,所以每个人都称他们为别的东西.以下是不同作者随着时间推移使用或提出的名称的一小部分样本:
最初,matz不想选择一个名字,而是希望社区能够选择一个名字.不幸的是,它没有.当matz和David Flanagan编写The Ruby Programming Language时,他们必须选择,他们选择了eigenclass(但是单例方法).Eigenclass也被用于ISO Ruby语言规范的初稿中(但主要是因为一旦找到"官方"版本,就很容易对该名称进行搜索和替换).
但是,在后来的草案和ISO Ruby语言规范的最终版本中,使用了单例类.当Object#singleton_class访问器方法最终在Ruby 1.9.2中正式引入并Module#singleton_class?在Ruby 2.1中引入时,也选择了该名称.
Metaclass是_Why在" 为什么(Poignant)Ruby指南"(以及其他着作和库)中使用的术语,它对整整一代非日语Ruby开发人员具有极大的影响力,并且长期以来一直是最好的Ruby元编程的介绍(以及唯一的英文版).
如今,单例类和本征类似乎主要使用(由于核心库中的方法名称,单例类接管),偶尔提到元类.
就个人而言,我从不喜欢元类,因为它实际上已经有了不同的含义:元类是类的类.在Ruby中,类有两个定义其行为的类:它们的单例类和Class类,其中任何一个都可以被认为是它们的元类.(虽然这些类都不能做其他语言中的元类可以做的事情,例如更改方法查找或继承的规则.)
虚拟类甚至更成问题,因为它不仅在编程中具有不同的含义(可以在子类中重写的嵌套类,例如Beta或Newspeak,并且为Scala提议但是放弃),它甚至已经在Ruby社区中有第三个不同的含义:virtual class是在MRI和YARV源代码中给出的单例类和包含类的名称.
内部类也已经具有作为嵌套类的同义词的含义(一个类是外部类的成员,就像方法一样).
就个人而言,我总是喜欢本征类,在对称性上已经建立了技术术语,如特征值,特征向量,本征空间,特征函数,特征面,特征波,本征平面,本征态,本征问题等.但是,我现在采用了单例类这个术语,因为它更容易谈谈singleton_class返回单例类的方法.