Ruby对象缓存
发布时间:2020-12-16 20:58:33 所属栏目:百科 来源:网络整理
导读:我有许多具有唯一ID的 Ruby对象,我目前正在哈希中进行缓存.为对象分配ID时,它会进入哈希.缓存是完整的,即具有存在于Ruby作用域中的ID的每个对象也应该在缓存中. 但是,一旦它们从所有其他范围中消失,我很难找到从缓存中删除对象的方法.当然,这是因为缓存中包
我有许多具有唯一ID的
Ruby对象,我目前正在哈希中进行缓存.为对象分配ID时,它会进入哈希.缓存是完整的,即具有存在于Ruby作用域中的ID的每个对象也应该在缓存中.
但是,一旦它们从所有其他范围中消失,我很难找到从缓存中删除对象的方法.当然,这是因为缓存中包含的对象不会被垃圾回收. 有没有解决这个问题的方法? 解决方法
类似于WeakHash的东西会做到这一点.这是一个更完整的实现,可以处理Fixnums,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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |