我有许多具有唯一ID的
Ruby对象,我目前正在哈希中进行缓存.为对象分配ID时,它会进入哈希.缓存是完整的,即具有存在于Ruby作用域中的ID的每个对象也应该在缓存中.
但是,一旦它们从所有其他范围中消失,我很难找到从缓存中删除对象的方法.当然,这是因为缓存中包含的对象不会被垃圾回收.
有没有解决这个问题的方法? WeakRef
的文档建议使用WeakHash类,但实际使用它似乎不可接受,尽管它与我认为我的项目所需的非常接近.
类似于WeakHash的东西会做到这一点.这是
一个更完整的实现,可以处理Fi
xnums,Symbols和Floats(以及其他不可变类型,如果您将它们
添加到列表中):
class WeakHash < Hash
def []=(k,v)
if(![Fixnum,Symbol,Float].include? k.class)
k = WeakRef.new(k)
end
if(![Fixnum,Float].include? v.class)
v = WeakRef.new(v)
end
super k,v
end
end