覆盖从父项 class 继承的依赖项 gem class

Overwriting a dependency gem class which inherits from a parent class

覆盖从父项 class

继承的依赖项 gem class

如果我正在使用 blah gem,并且此 gem 有一个名为 foo 的 class,它继承自 bar。但是我想在这个 gem 上更改这个 class。有没有办法可以做到这一点,我已经看到了从 gems 覆盖 classes 上的方法但不覆盖实际 classes.

的方法

例如

我要覆盖的class如下:

class foo < bar
  def some_method
  end

  def another_method
  end
end

我想如何覆盖这个class:

class foo < not_bar
  def a_different_some_method
  end

  def a_different_another_method
  end
end

不,如果不基本上重写子class,您实际上不能更改父class。如果你在每个 class 中只有两个方法,那可能没问题,但是 Ruby classes 使用单继承,所以你不能重新分配一个 subclass 给一个不同的 superclass 而无需重新定义它。但是,您可以执行以下任一操作:

  1. 重新打开 class 并重新定义其方法。
  2. 预先添加一个模块以重新定义现有方法的行为。
  3. 为单例 class 或该 class 的单例实例添加或修改方法。
  4. 如果您的 class 继承自 Delegator,您可以将委托 class 更改为 #__setobj__

由于您还没有真正定义用例,因此很难判断哪种方法最适合您。但是,一旦父 class 被定义,它就会保持定义状态,因此您必须以其他方式做您想做的任何事情。