微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ruby对象缓存

我有许多具有唯一ID的 Ruby对象,我目前正在哈希中进行缓存.为对象分配ID时,它会进入哈希.缓存是完整的,即具有存在于Ruby作用域中的ID的每个对象也应该在缓存中.

但是,一旦它们从所有其他范围中消失,我很难找到从缓存中删除对象的方法.当然,这是因为缓存中包含的对象不会被垃圾回收.

有没有解决这个问题的方法WeakRef的文档建议使用WeakHash类,但实际使用它似乎不可接受,尽管它与我认为我的项目所需的非常接近.

解决方法

类似于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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐