在Ruby中,术语“元类”,“本征类”和“单例类”是完全同义和可替代的吗?

Class类的文档有一个令人难以置信的混乱图,涉及“元类”.我试图揭开这里实际发生的事情的神秘面纱.这三个词都是……

>元类
>本征类
>单身人士班

Ruby中的同义词?我知道元类在Python中意味着特定和不同的东西,例如,但在Ruby中呢?

解决方法

tl;博士:是的.

在过去,没有人知道该怎么称呼他们,所以每个人都称他们为别的东西.以下是不同作者随着时间推移使用或提出的名称的一小部分样本:

>单身人士班
>本征类
>元类
>幽灵班
>自己的班级
>虚拟课
>影子课
> myclass
>自我阶级
> overclass
>下层阶级
>锚类
>嵌入式课程
>内在阶级
>天生的课
>无名的课
>单元课
>原子类
>奇异的课程
>奇点
>邦戈班
>内心阶级

最初,matz不想选择一个名字,而是希望社区能够选择一个名字.不幸的是,它没有.当matz和David Flanagan写了The Ruby Programming Language时,他们必须选择,他们选择了本征类(但是单例方法). eigenclass也用于ISO Ruby语言规范的初稿(但主要是because it was very easy to run a search&replace on that name once an “official” one had been found).

但是,在later draftsfinal version of the ISO Ruby Language Specification中,使用单例类.当Object#singleton_class访问器方法最终在Ruby 1.9.2中正式引入时,也选择了该名称,并在Ruby 2.1中引入了Module#singleton_class?.

Metaclass是_why the lucky stiffWhy’s (Poignant) Guide to Ruby(以及其他着作和库)中使用的术语,它对整整一代非日语Ruby开发人员具有很高的影响力,并且很长一段时间内对Ruby元编程的最佳介绍(以及唯一的英语)一).

如今,单例类和本征类似乎主要使用(由于核心库中的方法名称,单例类接管),偶尔提到元类.

就个人而言,我从不喜欢元类,因为它实际上已经有了不同的含义:元类是类的类.在Ruby中,类有两个定义其行为的类:它们的单例类和Class类,其中任何一个都可以被认为是它们的元类. (尽管这些类中的任何一个都不能执行其他语言中的元类可以执行的操作,更改方法查找或继承的规则.)

虚拟类甚至更成问题,因为它不仅在编程中具有不同的含义(可以在子类中重写的嵌套类,例如Beta或Newspeak,并且为Scala提议但是放弃),它甚至已经在Ruby社区中有第三个不同的含义:virtual class是在MRI和YARV源代码中给出的单例类和包含类的名称.

内部类也已经具有作为嵌套类的同义词的含义(一个类是外部类的成员,就像方法一样).

就个人而言,我总是喜欢本征类,在对称性上已经建立了技术术语,如特征值,特征向量,本征空间,特征函数,特征面,特征波,本征平面,本征态,本征问题等.但是,我现在采用了单例类这个术语,因为它更容易将singleton_class方法称为返回单例类.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...