什么是Ruby与Python Metaclasses的模拟?
Python具有元类的想法,如果我理解正确,允许您在构建时修改类的对象.你不是修改类,而是要被创建的对象被初始化.
Python(至少与3.0相同)也有类装饰器的想法.再次,类装饰器允许修改类定义在它被声明的那一刻. 现在我相信Ruby中的类装饰器有一个等效的功能,但是我目前不知道与元类相当的东西.我相信你可以通过一些功能轻松地将任何Ruby对象抽出来,然后做一些你想要的功能,但是有没有一种特殊的语言来设置像元类呢? 那么Ruby还有什么类似于Python的元类呢? 编辑我在Python的元类上.元类和类装饰器做出非常相似的事情.它们在定义时修改类,但是以不同的方式进行修改.希望一个Python大师会进一步了解Python中的这些功能. 但是,类或父类可以实现一个__new __(cls [,..])函数,它可以在使用__init __(self [,..])初始化之前自定义对象的构造. 编辑这个问题主要是讨论和了解两种语言在这些功能中的比较.我熟悉Python而不是Ruby,好奇.希望任何对这两种语言有相同问题的人都会发现这篇文章有帮助和启发. 解决方法
Ruby没有元类. Ruby中有一些构造,有些人有时错误地称为元类,但它们不是(这是无休止的混乱的根源).
但是,有很多方法可以在Ruby中实现与元类相同的结果.但是,如果没有告诉我们你想做什么,那么这些机制可能是什么呢? 简而言之: > Ruby没有元类 那么,什么是元类呢?那么他们是课堂.所以,让我们退一步:什么是课程? 课程… >是对象的工厂 例如,Array类生成数组对象,定义数组的行为,并定义“array-ness”的意思. 回到元类. 元类… >是类的工厂 在Ruby中,这三个职责分为三个不同的地方: >类类创建类并定义一点行为 所以,这三个东西一起起到了元类的作用,但是这两者之中的一个都不是元类(每个只实现元类的一小部分),也不是元类的总和(因为它们比那). 不幸的是,有些人称之为类元类的本征类. (直到最近,我是那些被误导的灵魂之一,直到我终于看到了光).其他人称之为所有本征类元类. (不幸的是,其中一个人是Ruby元编程和Ruby对象模型中最受欢迎的教程之一).一些流行的库将一个元类方法添加到Object中,该对象返回对象的本征类(例如ActiveSupport,Facets,metaid).有些人调用所有虚拟类(即本征类和包含类)元类.有些人称Class为metaclass.即使在Ruby源代码本身中,单词“metaclass”也用于指代不是元类的东西. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |