类的实例是否为其设置索引?如果是这样,是否有可能迭代它们很像数组,以压缩我使用的代码行数量?目前,我的程序有超过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