首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby对象缓存

Ruby对象缓存
EN

Stack Overflow用户
提问于 2013-03-11 08:08:55
回答 1查看 982关注 0票数 5

我有许多具有唯一in的Ruby对象,我目前正将它们缓存在Hash中。当一个对象被分配一个ID时,它会进入哈希表。缓存是完整的,即每个具有存在于Ruby作用域中的ID的对象也应该在缓存中。

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

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

EN

回答 1

Stack Overflow用户

发布于 2013-03-11 10:09:56

类似于WeakHash的东西可以做到这一点。下面是一个更完整的实现,它可以处理Fixnums、Symbol和Floats (如果您将它们添加到列表中,还可以处理其他不可变类型):

代码语言:javascript
复制
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
end
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15329315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档