【问题标题】:Overwriting a dependency gem class which inherits from a parent class覆盖从父类继承的依赖 gem 类
【发布时间】:2021-10-21 17:04:26
【问题描述】:

覆盖从父类继承的依赖 gem 类

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

例如。

我要覆盖的类如下:

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 class rubygems


【解决方案1】:

不,你实际上不能改变父类而不基本上重写子类。如果每个类中只有两个方法可能没问题,但是 Ruby 类使用单继承,所以如果不重新定义子类,就不能将子类重新分配给不同的超类。但是,您可以执行以下任何操作:

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

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

【讨论】:

  • 嘿,是的,很抱歉缺少上下文。我将在这里展开。我基本上有依赖关系,它不适用于最新版本的 ruby​​。但我无法更新版本,因为该版本已被另一个 gem 锁定。它不起作用的原因是有一个继承自 SortedSet 的类,这在我要使用的 Ruby 版本中已被弃用。我有代码可以更新该类以使用 Set 而不是 Sorted Set,所以我想知道如何覆盖这个类并使用我自己的。如果有办法,从上面的答案看来似乎没有。
猜你喜欢
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 2012-11-20
  • 2023-03-10
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多