将私有或受保护方法转换为 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
可以使用 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