可以使用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