gpt4 book ai didi

ruby - 你能改变 Ruby 中类的默认继承吗?

转载 作者:数据小太阳 更新时间:2023-10-29 08:27:49 25 4
gpt4 key购买 nike

作为一个业余爱好项目,我正在尝试构建自己的对象系统。我想知道是否有一种方法可以更改所有类的默认继承 Object到我的基础类 Entity ,这样每当我创建一个新类时,我就不必明确地说 class Thing < Entity ;理想情况下,我只能说 class Thing并让它的默认父类(super class)是我的 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 替换为默认父类(super class),则每个类(包括 Ruby 核心中的类)现在都将从这个新的默认父类(super class)继承。您可以更轻松地获得相同的效果(只是没有不同的名称)并且不需要自定义 Ruby 只需更改 Object 本身。这就是能够重新开课的美妙之处!例如:

class Object
def foo
'bar!'
end
end

class A; end

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

如果你想变得友善,你甚至可以将所有相关方法放在 Entity 模块而不是类中,然后将其includeObject.

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com