作为一个小爱好项目,我正在尝试建立自己的对象系统。我想知道是否有一种方法可以将所有类的默认继承从Object更改为基类Entity,这样每当我创建一个新类时,就不必显式地说class Thing < Entity;理想情况下,我只需要说class Thing并让它的默认超类成为我的Entity类。

最佳答案

当然,您可以通过修改relevant part of the Ruby source并重新编译ruby来做到这一点:

VALUE
rb_define_class_id(ID id, VALUE super)
{
    VALUE klass;

    if (!super) super = rb_cObject;  // <-- where the default is set
    klass = rb_class_new(super);
    // ...

但这是一个巨大的麻烦,需要修补和运行一个定制的ruby,而且可能会有很多问题,而且有些东西是硬编码的,假设Object是默认值。
除此之外,还有什么意义?如果将Object替换为其他类作为默认超类,那么包括ruby core中的类在内的每个类都将从这个新的默认超类继承。只需更改Object本身,您就可以更容易地获得相同的效果(只是没有不同的名称),而且不需要自定义ruby。这就是重新开课的好处!例如:
class Object
  def foo
    'bar!'
  end
end

class A; end

A.new.foo  #=> 'bar!'

如果你想和蔼可亲,你甚至可以把所有相关的方法放在一个Entity模块而不是一个类中,然后把它放到include中。

关于ruby - 您可以更改Ruby中类的默认继承吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17333832/

10-09 07:49
查看更多