2013-10-29 36 views
3

我刚刚意识到,我使用类类型作为一个散列变量的关键: (不是这个精确地)使用class作为散列键?

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

所以我很好奇,如果任何人都可以解释。有一些缺点吗?它如何存储在内存中?我应该将它(obj.class)转换为符号还是字符串?

+0

Nah。无论如何,类本身就是一个对象。任何红宝石都是对象,你可以自由使用它们。 – texasbruce

回答

4

在ruby中,您可以让任何对象成为哈希键。该对象的方法hash被称为实际哈希。我认为这种方法已经足够优化,足够用于Class。不需要在这里将类转换为字符串或符号。

2

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

ObjectSpace.each_object(klass).to_a 
+0

这是一个非常简单的例子,只是为了解释自己,谢谢,虽然很高兴知道这样的事情。我爱红宝石。无论如何,你知道如何使用它的性能? –