将私有或受保护方法转换为 public

Converting private or protected method to public

可以使用 send 调用私有方法,但是有没有办法以某种方式对 class 进行猴子修补以以常规方式调用它?

将私有方法转换为 public 不是一个好主意。你仍然可以这样做。

考虑您原来的class和方法如下

class A
  private
  def a
    p "hello"
  end
end

您可以将此方法 a 转换为 public,如下所示

class A
  alias_method :original_a, :a
  def a
    original_a
  end
end

我们的想法是制作原始方法的别名副本,然后从具有相同名称的 public 方法调用这个原始私有方法。

Module#public 成功了。

class Foo
  private
  def hello
    "hello"
  end
end

class Foo
  public :hello
end