覆盖从父类继承的依赖gem类
如果我使用blah
gem,并且这个gem有一个名为foo
的类,该类继承自bar
。但我想在这块宝石上改变这个类。有一种方法我可以做到这一点,我已经看到的方法覆盖类的方法从宝石,但不覆盖实际的类。
。
我想覆盖的类如下:
class foo < bar
def some_method
end
def another_method
end
end
如何重写这个类:
class foo < not_bar
def a_different_some_method
end
def a_different_another_method
end
end
不,你实际上不能改变父类而不重写子类。如果在每个类中只有两个方法,这可能没问题,但是Ruby类使用单继承,因此您不能在不重新定义子类的情况下将子类重新分配给不同的超类。但是,您可以执行以下任何操作:
- 重新打开类并重新定义它的方法
- 添加一个模块来重新定义现有方法的行为。
- 为单例类或该类的单例实例添加或修改方法。
- 如果你的类继承自delegate,你可以用#__setobj__来改变delegate类。
因为您还没有真正定义一个用例,所以很难说哪种方法最适合您。然而,一旦父类被定义,它就会保持定义状态,所以你必须用另一种方式来做你想做的事情。