代码之家  ›  专栏  ›  技术社区  ›  horseyguy

Ruby是否有一个元对象协议,如果没有,是否可以实现一个?

  •  5
  • horseyguy  · 技术社区  · 14 年前

    请原谅我的无知,什么是元对象协议,Ruby有吗?如果没有,是否可以为Ruby实现一个呢?如果Ruby有一个元对象协议,那么它会有哪些特性呢?

    2 回复  |  直到 14 年前
        1
  •  2
  •   AndyG    8 年前

    什么是元对象协议?

    我遇到的最好的描述是 Class::MOP

    元对象协议是对象系统的API。

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

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


    鲁比有吗?

    根据这条线索 Reopening builtin classes, redefining builtin functions? Perlmonks 我想答案是 (至少在最严格的意义上是拖把)。

    显然,这里有一些回旋余地,因此在so的Perl端可能值得发布一个问题,因为 类::MOP Moose 作者确实回答了 questions there .

        2
  •  1
  •   yorodm    8 年前

    如果你仔细看这个定义,你会看到那个Ruby 确实有 亚圆形拖把 很好(我甚至可以说是天才),但这不是唯一正确的方法,看看 Smalltalk . 要实现(比如说基本的)MOP,您只需要提供一些函数,这些函数允许您的运行时:

    1. 创建新属性或方法
    2. 使类从其他类继承(“更改类结构”)
    3. 生成或更改定义类方法的代码。

    另一方面:当Class::MOP的作者声称用一个元循环MOP可以做的一些事情在Ruby中很难做到时,他是对的(IMHO)(免责声明:我有 零,齐奇,娜达

    推荐文章