你能改变Ruby中类的默认继承吗?
作为一个小爱好项目,我正在尝试建立我自己的对象系统。我想知道是否有一种方法可以将所有类的默认继承从你能改变Ruby中类的默认继承吗?,ruby,class,inheritance,metaprogramming,Ruby,Class,Inheritance,Metaprogramming,作为一个小爱好项目,我正在尝试建立我自己的对象系统。我想知道是否有一种方法可以将所有类的默认继承从Object更改为我的基类Entity,这样每当我创建一个新类时,我就不必显式地说class Thing
Object
更改为我的基类Entity
,这样每当我创建一个新类时,我就不必显式地说class Thing
;理想情况下,我只需要说类的事情
,并让它的默认超类成为我的实体
类。您可以通过修改并重新编译Ruby来做到这一点:
值
rb_定义_类_id(id id,超级值)
{
价值克拉斯;
如果(!super)super=rb_cObject;//否,不幸的是,这在Ruby中是不可能的。Ruby没有一个元对象协议,例如CLOS,它允许您操纵对象模型的核心语义。不过这很好!+1,尽管您可能会演示如何monkeypatch对象,或者在其中包含一个模块。(您甚至可以在键入时添加此编辑。)+1,感谢您的支持!我最近才开始使用Ruby,虽然我开始对它的语法非常熟悉,但我仍然不完全习惯于基本上开源的编程语言。由于我使用它的时间不长,我还没有真正体验到动态修改类的能力。我相信我会同意你的最后一个建议。@DesAdams它很强大,但我建议在核心Ruby类中少用它,因为它很容易失控。+1表示“我建议在核心Ruby类中少用它”。我认为这样做没有任何意义。您计划在实体
上使用的任何功能都可以在对象
或包含
/扩展
到对象
,您的操作就完成了。
class Object
def foo
'bar!'
end
end
class A; end
A.new.foo #=> 'bar!'