gpt4 book ai didi

Ruby 对象缓存

转载 作者:数据小太阳 更新时间:2023-10-29 07:17:51 26 4
gpt4 key购买 nike

我有许多具有唯一 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, Symbol, Float].include? v.class)
v = WeakRef.new(v)
end
super k,v
end
end

关于Ruby 对象缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15329315/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com