如何解决如何在Ruby中查找类的每个实例
| 有没有办法获取Ruby中某个类的所有对象? 澄清:class Pokemon
end
pikatchu = Pokemon.new
charmander = Pokemon.new
因此,有没有办法我可以某种方式检索对这两个对象(pikatchu
和charmander
)的引用?
实际上,我想过将所有内容都通过initialize推入类数组中,但这可能会变得很大,并且我假设可能有本机Ruby方法。
解决方法
解决的办法是使用
ObjectSpace.each_object
方法
ObjectSpace.each_object(Pokemon) {|x| p x}
产生
<Pokemon:0x0000010098aa70>
<Pokemon:0x00000100992158>
=> 2
有关详细信息,请参见PickAxe书第25章。
,是的,可以使用ObjectSpace
,但实际上,只需在创建实例时跟踪它们即可。
class Pokemon
@pokees = []
self.class.public_send(:attr_reader,:pokees)
def initialize
self.class.pokees << self
end
end
pikatchu = Pokemon.new
#=> #<Pokemon:0x00005c46da66d640>
charmander = Pokemon.new
#=> #<Pokemon:0x00005c46da4cc7f0>
Pokemon.pokees
#=> [#<Pokemon:0x00005c46da66d640>,#<Pokemon:0x00005c46da4cc7f0>]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。