Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
你能改变Ruby中类的默认继承吗?_Ruby_Class_Inheritance_Metaprogramming - Fatal编程技术网

你能改变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!'