【问题标题】:Superclass mismatch in RubyRuby 中的超类不匹配
【发布时间】:2015-12-02 15:25:47
【问题描述】:

我有一堂课:

class Example
  attr_reader :name
  ...
end

后来我决定将name 字段抽象为父类,以便可以重用。当我使用load 'filename.rb' 加载此代码时,

class Named
  attr_reader :name
  ...
end
class Example < Name
  ...
end

我得到TypeError: superclass mismatch for class Example,因为我试图重新打开Example 类并更改其超类,这是不允许的。

为了解决这个问题,我一直在手动删除课程:

Object.send(:remove_const, :Example)

然后重新加载,但这既麻烦又烦人。有没有更简单的方法来强制重新加载而不会遇到此问题?

【问题讨论】:

  • 不清楚“将名称字段抽象为父类”是什么意思。
  • 我想知道你的开发过程是什么样的,当你试图避免重新加载更改的代码时......
  • 尝试改用mixin
  • 我并不想避免重新加载。我正在尝试消除Object.send(:remove_const, ...) 步骤。
  • @SilvioMayolo 你如何重新加载你的代码?您是否有在运行时修改的长时间运行的进程?

标签: ruby inheritance refactoring


【解决方案1】:

没有。一旦定义了类的父类,就不能更改它。

【讨论】:

  • 也许我有点不清楚。我不想改变父母。我想以某种方式告诉 Ruby,我不是要修改现有的类,而是从头开始完全重建它,这样我就不会遇到这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2018-03-10
相关资源
最近更新 更多