可以使用send
调用私有方法,但有没有办法以某种方式猴子修补类以常规方式调用它?将私有或受保护的方法转换为公开
-3
A
回答
1
Module#public
有窍门。
class Foo
private
def hello
"hello"
end
end
class Foo
public :hello
end
+0
优秀的方法 –
0
将私有方法转换为公共方法并不是一个好主意。你仍然可以这样做。
考虑您的原始类和方法如下
class A
private
def a
p "hello"
end
end
你可以将这个方法a
转换为公共如下
class A
alias_method :original_a, :a
def a
original_a
end
end
的想法是,我们使原有方法的混叠副本,然后调用这个原始的私有方法来自同名的公共方法。
相关问题
- 1. 受保护的和私有的方法
- 2. 如何知道该方法是公开的,受保护的或私人的PHP?
- 3. 将受保护/私有属性公开给某些类
- 4. C++类(公共,私有和受保护)
- 5. 将私有方法更改为受保护以进行测试
- 6. 调用私有或受保护的方法包括:文件
- 7. Java:简单的方法来公开受保护的方法
- 8. 访问受保护或私有属性
- 9. 为什么要调用受保护的或私有的CSharp方法/变量?
- 10. 确保私有/受保护方法的输入?
- 11. C++为什么要使用公共,私有或受保护的继承?
- 12. 将私有方法更改为受保护或包私有单元测试 - 好还是不好?
- 13. 如何在受测试的方法中模拟受保护/私有方法?
- 14. 有无论如何定义公共或私人或受保护的类在PHP
- 15. Rails中的受保护和私有方法
- 16. 保持API调用私有/受保护
- 17. “公共”,“私人”和“受保护”方法的确切做法是什么?
- 18. 公开一个受保护的属性
- 19. PHP类常量 - 公共,私有还是受保护的?
- 20. javadoc所有 - 私人,公共和受保护的成员
- 21. python中的私有公共受保护访问说明符
- 22. 如何将包含的私有方法公开为公共类方法?
- 23. 将C++类私有变量转换为公开
- 24. Ruby中的私有/受保护块?
- 25. 仅获取受保护方法和公共方法的MethodInfo?
- 26. 公共/受保护/私有继承问题
- 27. 范围的私有,保护和公共
- 28. Junit受保护的方法
- 29. 受保护的方法
- 30. 为什么我可以在后继中公开受保护的方法?
这不是“咆哮私人方法如何是私人的原因”。这些语言功能出于某种原因,并不旨在轻松绕过。正如你已经指出的那样,你可以用'.send()'来规避它。你也许也可以为它补丁,你为什么不尝试呢?但为什么?这是一个完全理智而合理的问题,旨在帮助你实现目标,因为它看起来像你使用错误的工具来解决这个问题... – Carpetsmoker
有问题的方法是'ActiveRecord :: Base.sanitize_sql_array' – synapse
为什么你想调用这个方法吗?你想达到什么目的?需要使用该工具修复哪些问题? – Carpetsmoker