類的實例是否爲其設置索引?如果是這樣,是否有可能迭代它們很像數組,以壓縮我使用的代碼行數量?目前,我的程序有超過100個類的實例,我想寫一個循環,所以代碼基本上不是一個龐大的「Class#new's」列表!這種做法有悖於使課堂本身成爲首要目標(不是真的,但你明白了)。Ruby - 遍歷實例
0
A
回答
3
您可以使用ObjectSpace檢索給定類的所有實例化對象: 比方說您有一個類名爲MyClass
,你想那個類的所有實例,然後
ObjectSpace.each_object(MyClass) do |obj|
#do what ever you want to do with that object
end
這是怎麼過的一個壞想法做到這一點。它也將加載MyClass
實例,該實例仍然來自先前未被垃圾收集的請求的內存。
attr_reader
應該設置爲直接訪問obj(類變量)。也可以定義訪問它們的方法。
+0
您可以首先運行'GC.start'來刪除剩餘的局部變量(例如,在沒有GC的spec文件中它不適用於我) - 在ObjectSpace之前寫入'puts'以打印對象的計數。 – bimlas 2016-09-06 08:05:53
1
Aside Qaisar Nadeem's answer using ObjectSpace您可以使用變量來存儲給定類的實例。您可以使用類變量:
class B
@@instances = []
def initialize
@@instances << self
end
def self.instances
@@instances
end
end
B.new
# => #<B:0x3f54408>
B.new
# => #<B:0x3efbb90>
B.instances
# => [#<B:0x3f54408>, #<B:0x3efbb90>]
但是繼承類使用相同的類變量(可能是也可能不是你想要的):
class C < B
end
C.new
# => #<C:0x39900a8>
B.instances
# => [#<B:0x3f54408>, #<B:0x3efbb90>, #<C:0x39900a8>]
您可以使用類的實例變量(不是與對象的實例變量相同!):
class AA
@instances = []
def self.push_instance instance
@instances << instance
end
def initialize
self.class.push_instance self
end
def self.instances
@instances
end
end
AA.new
# => #<AA:0x41ba0e8>
AA.instances
# => [#<AA:0x41ba0e8>]
AA.new
# => #<AA:0x29f8638>
AA.instances
# => [#<AA:0x41ba0e8>, #<AA:0x29f8638>]
class BB < AA
@instances = []
end
AA.instances
=> [#<AA:0x41ba0e8>, #<AA:0x29f8638>]
BB.new
=> #<BB:0x3fe8e48>
BB.new
=> #<BB:0x3fa4bf8>
BB.new
=> #<BB:0x3f43e18>
BB.instances
=> [#<BB:0x3fe8e48>, #<BB:0x3fa4bf8>, #<BB:0x3f43e18>]
AA.instances
=> [#<AA:0x41ba0e8>, #<AA:0x29f8638>]
相關問題
- 1. Ruby在遍歷自定義類實例時返回實例
- 2. 在Python中遍歷n遍歷樹並返回節點實例
- 3. 現實世界前/後階遍歷樹遍歷的例子
- 4. 如何遍歷所有wx.CheckBox實例?
- 5. 在ruby中循環遍歷
- 6. OrientDB - 遍歷示例 - BREADTH_FIRST
- 7. 遍歷樹遍歷
- 8. jquery頭痛 - 實時遍歷
- 9. 在Ruby中遞歸遍歷一個Hash
- 10. 用nils遍歷ruby嵌套散列?
- 11. 遍歷2個包含類實例的列表
- 12. 如何遍歷模型實例的多對一字段?
- 13. 只能遍歷一個數組或java.lang.Iterable的實例
- 14. As2:onPress函數循環遍歷所有實例
- 15. NSFileManager中的錯誤(實例方法遍歷符號鏈接)
- 16. 遍歷數組
- 17. 遍歷
- 18. 遍歷
- 19. Json遍歷問題,無法遍歷值
- 20. DOM遍歷的AJAX調用遍歷
- 21. 遍歷的枚舉
- 22. Ruby實例評估
- 23. 如何實現廣度優先遍歷?
- 24. 如何遍歷ponyorm實體對象
- 25. 實現深度優先圖遍歷
- 26. 實現遍歷ul li的函數JQUERY
- 27. P2P連接的NAT遍歷實現
- 28. 我們如何遍歷實現迭代
- 29. HTML遍歷和查找最佳實踐
- 30. 遍歷圖表示實際操作
我不明白 - 你可以分享一些代碼來描述你在做什麼,而你希望發生什麼? – sameers 2014-12-03 06:02:49
「但你明白了」 - 唔......不,我不知道。 – 2014-12-03 11:26:00