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

时间:2016-03-15 11:13:54

标签: ruby metaprogramming

可以使用send调用私有方法,但有没有办法以某种方式修补类以常规方式调用它?

2 个答案:

答案 0 :(得分:3)

Module#public可以解决问题。

class Foo
  private
  def hello
    "hello"
  end
end

class Foo
  public :hello
end

答案 1 :(得分:0)

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

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

class A
  private
  def a
    p "hello"
  end
end

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

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

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