我是Ruby的新手(經驗豐富的Python,C++和C)。我需要創建一個只能由模塊中的其他類和方法使用的類。在Python中,我只是將其稱爲__classname。我會在C++中使用一個空的typedef。我如何做到這一點在紅寶石(或我吠聲錯誤的樹,而不是這樣做「紅寶石的方式」?)Ruby模塊中的私有類(不是類方法)?
16
A
回答
4
我還沒有看到這樣的概念到目前爲止在Ruby中,但我想你可以模擬通過創建私有方法來返回創建爲局部變量的類(請記住,在Ruby中,類與其他任何對象一樣,可以在方法中實例化並由其返回)。
順便說一句,即使Ruby中的私有方法也不像其他語言中的私有方法那樣私密 - 您可以始終使用send
方法訪問它們。但這樣做意味着你知道你在做什麼。
10
採取這一信息直接從this blog post,但由於紅寶石1.9.3,你可以使用private_constant
一個模塊中創建一個私有類:
class Person
class Secret
def to_s
"1234vW74X&"
end
end
private_constant :Secret
def show_secret
Secret.new.to_s
end
end
相關問題
- 1. Ruby的私有類方法
- 2. Ruby:調用模塊中的類方法
- 3. 判斷祖先是Ruby中的類還是模塊的方法?
- 4. 模塊模式中的私有方法:TypeError:undefined不是函數
- 5. 將類方法添加到ruby中的現有模塊中
- 6. Ruby模塊類繼承方法
- 7. ruby/datamapper:重構類方法到模塊
- 8. 在哪個類/模塊是Ruby中的=方法?
- 9. 從rails的父類中包含的模塊中調用父類的子類的私有方法是否可行?
- 10. 子類繼承包含Ruby中父類的模塊方法
- 11. Ruby模塊中的私有常用方法
- 12. 調用模塊類方法,而模塊名在Ruby中
- 13. Ruby類初始化(構造函數)是私有方法還是公有方法?
- 14. 是否有可能創建一個模塊或父類,使Ruby中的所有方法類方法?
- 15. 從Ruby的類方法調用私有實例方法
- 16. Ruby中的模塊和類
- 17. 你如何測試私有方法,類和模塊?
- 18. Ruby私有方法
- 19. Ruby類使用靜態方法調用私有方法?
- 20. ruby私人類方法幫手
- 21. 如何訪問Ruby中的私有類方法?
- 22. Ruby模塊和類
- 23. 在ruby中調用混合模塊中的類方法
- 24. 有沒有辦法從Ruby中的實例調用私有的類方法?
- 25. 只有靜態方法的類模塊
- 26. Mootools類中的私有方法
- 27. 包私有類中的公共方法
- 28. 包私有類中的公共方法
- 29. 私有方法中的類變量
- 30. 沒有類的Ruby方法?
該死。我認爲這是可能的,但我希望這不會是黑客......噢。猜猜我會找到更多的Ruby-ish方式來做到這一點。謝謝 - 你回答了我的問題。 – c4757p 2010-08-16 20:27:02
你應該等待其他答案,我可能是錯的。順便說一下,你想用私人課程實現什麼?哦,另一件事:在Ruby中,實例變量總是_private_,爲了揭示它們,您需要創建訪問器方法,但沒有人認爲_hackish_。 :) – 2010-08-16 20:54:18
其實我認爲這樣做/是/有點hackish - 這是我不喜歡關於Ruby的東西之一。另一個是愚蠢的隱式函數調用 - 我真的希望我可以通過名稱引用函數而不用調用它,而不使用符號或lambda。 我使用FFI動態連接外部庫,並且我想讓FFI C的結構遠離可用模塊。 – c4757p 2010-08-16 22:02:30