類的實例是否爲其設置索引?如果是這樣,是否有可能迭代它們很像數組,以壓縮我使用的代碼行數量?目前,我的程序有超過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. 現實世界前/後階遍歷樹遍歷的例子
- 3. 在Python中遍歷n遍歷樹並返回節點實例
- 4. Ruby:遍歷常量
- 5. 如何點擊/遍歷coreData實例
- 6. 如何遍歷所有wx.CheckBox實例?
- 7. 在ruby中循環遍歷
- 8. Ruby中的目錄遍歷
- 9. 遍歷ID Ruby on Rails
- 10. Ruby - 遍歷解析的JSON
- 11. OrientDB - 遍歷示例 - BREADTH_FIRST
- 12. 遍歷樹遍歷
- 13. jquery頭痛 - 實時遍歷
- 14. 實施應用型#遍歷
- 15. LinkedHashMap遍歷鍵遍歷
- 16. ruby - 懶惰地遍歷數組
- 17. rubyXL遍歷xslx中的特定列
- 18. 在整數中循環遍歷,ruby
- 19. 用nils遍歷ruby嵌套散列?
- 20. 在Ruby/Rails中循環遍歷數組
- 21. 循環遍歷狀態 - 範圍? ruby/rails
- 22. 在Ruby中遞歸遍歷一個Hash
- 23. 遍歷Ruby腳本流數據和ARGV
- 24. ruby中的對象樹遍歷
- 25. 循環遍歷兩個文件Ruby
- 26. 遍歷ArrayList並返回滿足實例檢查對象的ArrayList
- 27. 如何遍歷模型實例的多對一字段?
- 28. 如何遍歷一個ES6/2015類實例
- 29. 循環遍歷圖形的每個實例
- 30. 遍歷實例變量打印不需要的東西
我不明白 - 你可以分享一些代碼來描述你在做什麼,而你希望發生什麼? – sameers 2014-12-03 06:02:49
「但你明白了」 - 唔......不,我不知道。 – 2014-12-03 11:26:00