在對象或類上定義單一方法 之前是否存在本徵類?即它們是否總是存在或存在 當一個單例方法或類方法在定義?紅寶石何時本徵類成立
回答
對於像類這樣的對象來說,當創建一個新類時,它的特徵類也會被創建,以及它們在被創建時的對象。
例如: - 創建類
class User; end
或
User = Class.new
其eigenclass也同時產生,
並且有一個單獨的eigenclass針對每個對象創建用戶等級
每個對象總是有一個單例類。期。沒有ifs,沒有buts,沒有例外。
根據編譯器或解釋器的聰明程度,它可能會或可能不會執行一些性能優化。但是,像所有的性能優化,這些都是不允許更改程序的結果,所以即使這些性能優化做導致其中某一項單獨的類不實際上並不存在一定的狀態,該程序仍必須的行爲好像它確實存在,所以你無論如何都不能說出來。畢竟,這幾乎是「性能優化」中的定義。一些Ruby實現可能會做一些優化,其他的可能會做其他的優化,有些甚至可能不會做任何優化根本就不是。你不能從你的程序的結果中知道,你不應該在意,你一定不要在乎。
例如,YARV執行以下優化:
由於幾乎沒有對象有singleton方法,創建用於單個類每對象將是浪費內存,因此單類延遲方式創建:當您創建一個單例方法(
def foo.bar
或Object#define_singleton_method
)時,當您打開單例類(class << foo
),並且當您要求對象的單例類(Object#singleton_class
)時。由於幾乎每個類都有某種類方法,懶惰地創建單例類的開銷沒有意義,所以對於類,單例類始終是急切地創建的。
但是這是YARV的私人內部實現細節。 JRuby可能會有所不同。 IronRuby可能會有所不同。 MacRuby可能會做不同的事情。 MRuby可能會有所不同。黃玉可能會有所不同。魯比尼烏斯可能會做不同的事情。 MagLev可能會有所不同。即使是YARV的下一個補丁級別也可能會有所不同。
如果你看看它的單例類。如果你不是看看它,它是否在那裏並不重要。所以,在語義上,它總是在那裏。
- 1. 獨立紅寶石腳本中的紅寶石
- 2. 如何建立紅寶石
- 3. 建立紅寶石Koans
- 4. 紅寶石寶石生成內容
- 5. 紅寶石「基」類
- 6. 紅寶石插座性能特徵
- 7. 紅寶石文本
- 8. Plivo紅寶石寶石類衝突
- 9. 本地化軌道紅寶石寶石
- 10. 紅寶石寶石版本錯誤
- 11. 紅寶石版本1.9.3p392與寶石 'monbon'
- 12. 紅寶石寶石賽璐珞版本
- 13. '部署'寶石紅寶石腳本
- 14. 寶石cmd從紅寶石腳本
- 15. 在紅寶石ldap集成
- 16. 紅寶石:生成陣列
- 17. 完成紅寶石陣列
- 18. 紅寶石組成 - 如何顯示組成類的成員?
- 19. 紅寶石散列在紅寶石
- 20. 紅寶石寶石文檔
- 21. 寶石安裝紅寶石
- 22. 調試寶石紅寶石
- 23. 紅寶石程序寶石
- 24. 錯誤紅寶石寶石
- 25. Twitter的紅寶石寶石
- 26. 卸載紅寶石寶石
- 27. 紅寶石寶石 - LoadError
- 28. 紅寶石寶石LoadError
- 29. 安裝紅寶石寶石
- 30. 將紅寶石從紅寶石傳遞給bash腳本?