将私有或受保护的方法转换为公共方法


可以使用

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

Module#public可以解决问题。

class Foo
  private
  def hello
    "hello"
  end
end
class Foo
  public :hello
end

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

考虑您的原始类和方法,如下所示

class A
  private
  def a
    p "hello"
  end
end

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

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

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

最新更新