Ruby是否具有Metaobject协议,如果没有,是否可以实现一个?

hor*_*guy 5 ruby metaobject mop

请原谅我的无知,但什么是Metaobject协议,Ruby有一个吗?如果没有,是否可以为Ruby实现一个?如果Ruby有一个,Metaobject协议可能具有哪些功能呢?

dra*_*tun 2

What is a Metaobject protocol?

The best description I've come across is from the Class::MOP documentation:

A meta object protocol is an API to an object system.

更具体地说,它抽象了对象系统的组件(类、对象、方法、对象属性等)。然后可以使用这些抽象来检查和操作它们所描述的对象系统。

可以说,任何对象系统都有两个 MOP;隐式 MOP 和显式 MOP。隐式 MOP 处理方法分派或继承等事情,这些事情作为对象系统工作方式的一部分自动发生。显式 MOP 通常处理对象系统的内省/反射特征。

所有对象系统都有隐式 MOP。没有一个,他们就无法工作。显式 MOP 不太常见,并且根据语言的不同,可以从限制性(Java 或 C# 中的反射)到广泛开放(CLOS 是一个完美的例子)。


鲁比有吗?

根据此线程重新打开内置类,重新定义内置函数? Perlmonks 的文章我认为答案是否定的(至少在 MOP 的最严格意义上)。

显然,这里有一些回旋余地,因此可能值得在 SO 的 Perl 方面发布一个问题,因为Class::MOP/ Moose作者确实在那里回答了问题

  • 感谢您提供的信息,但是阅读第一个链接“Reopining 内置类...”看来作者的 Ruby 评论确实有很多错误,这确实破坏了他的观点。他所说的大部分在 Ruby 中很难或不可能做到的事情实际上在 Ruby 中很容易做到。我很想看到一篇由精通 Ruby 和 Perl 的人撰写的类似性质的文章:) 不过谢谢! (2认同)