可以使用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. C++类(公共,私有和受保护)
- 3. 将私有方法更改为受保护以进行测试
- 4. 为什么要调用受保护的或私有的CSharp方法/变量?
- 5. 确保私有/受保护方法的输入?
- 6. 将私有方法更改为受保护或包私有单元测试 - 好还是不好?
- 7. 如何在受测试的方法中模拟受保护/私有方法?
- 8. 有无论如何定义公共或私人或受保护的类在PHP
- 9. Rails中的受保护和私有方法
- 10. 保持API调用私有/受保护
- 11. 公开一个受保护的属性
- 12. PHP类常量 - 公共,私有还是受保护的?
- 13. javadoc所有 - 私人,公共和受保护的成员
- 14. 将C++类私有变量转换为公开
- 15. Ruby中的私有/受保护块?
- 16. 仅获取受保护方法和公共方法的MethodInfo?
- 17. 公共/受保护/私有继承问题
- 18. 受保护的方法
- 19. 为什么我可以在后继中公开受保护的方法?
- 20. 受保护/私有继承铸造
- 21. 公众,保护私人
- 22. 手稿 - 作为私人或受保护的对象
- 23. 从子类获取父私有或受保护的值
- 24. 从Symfony2存储库访问私有或受保护的属性
- 25. 将公开的现有私有RDS MySQL实例切换为可公开访问
- 26. 私人/受保护方法的城堡温莎拦截器
- 27. java私有方法返回公开
- 28. 公共vs受保护
- 29. 为什么在Obejct类中有公共方法,它们可能受到保护?
- 30. 与公共,私人和受保护区别
这不是“咆哮私人方法如何是私人的原因”。这些语言功能出于某种原因,并不旨在轻松绕过。正如你已经指出的那样,你可以用'.send()'来规避它。你也许也可以为它补丁,你为什么不尝试呢?但为什么?这是一个完全理智而合理的问题,旨在帮助你实现目标,因为它看起来像你使用错误的工具来解决这个问题... – Carpetsmoker
有问题的方法是'ActiveRecord :: Base.sanitize_sql_array' – synapse
为什么你想调用这个方法吗?你想达到什么目的?需要使用该工具修复哪些问题? – Carpetsmoker