作为一个小爱好项目,我正在尝试建立自己的对象系统。我想知道是否有一种方法可以将所有类的默认继承从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/