我有许多具有唯一in的Ruby对象,我目前正将它们缓存在Hash中。当一个对象被分配一个ID时,它会进入哈希表。缓存是完整的,即每个具有存在于Ruby作用域中的ID的对象也应该在缓存中。
但是,一旦对象从所有其他作用域中消失,我就很难找到从缓存中删除对象的方法。当然,这是因为缓存中包含的对象不会被垃圾回收。
有没有解决这个问题的方法?WeakRef的文档建议使用WeakHash类,但它似乎不适合实际使用,尽管它非常接近我认为我的项目所需的类。
发布于 2013-03-11 10:09:56
类似于WeakHash的东西可以做到这一点。下面是一个更完整的实现,它可以处理Fixnums、Symbol和Floats (如果您将它们添加到列表中,还可以处理其他不可变类型):
class WeakHash < Hash
def []=(k, v)
if(![Fixnum, Symbol, Float].include? k.class)
k = WeakRef.new(k)
end
if(![Fixnum, Symbol, Float].include? v.class)
v = WeakRef.new(v)
end
super k,v
end
endhttps://stackoverflow.com/questions/15329315
复制相似问题