使用class作为哈希的键?

时间:2013-10-29 15:09:01

标签: ruby

我刚刚意识到我使用类类型作为哈希变量的键: (不是这个)

def add_to_cache(obj)
  @cache[obj.class] = [] unless @cache.has_key? obj.class
  @cache[obj.class] << obj
end

所以我很好奇是否有人可以解释它。有一些缺点吗?它是如何存储在内存中的?我应该将它(obj.class)转换为Symbol或String吗?

2 个答案:

答案 0 :(得分:4)

在ruby中,您可以将任何对象作为哈希的键。调用对象的方法hash进行实际散列。我假设这个方法已经足够优化并且足够Class。不需要在此处将类转换为字符串或符号。

答案 1 :(得分:2)

我猜你的目标可能是跟踪某个班级的所有实例。如果是这种情况,那么您不需要也不应该手动缓存它们。要获取类klass的所有实例,请执行以下操作:

ObjectSpace.each_object(klass).to_a