可以使用
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
这个想法是我们制作原始方法的别名副本,然后从具有相同名称的公共方法调用此原始私有方法。