我刚刚意识到,我使用类类型作为一个散列变量的关键: (不是这个精确地)使用class作为散列键?
def add_to_cache(obj)
@cache[obj.class] = [] unless @cache.has_key? obj.class
@cache[obj.class] << obj
end
所以我很好奇,如果任何人都可以解释。有一些缺点吗?它如何存储在内存中?我应该将它(obj.class)转换为符号还是字符串?
我刚刚意识到,我使用类类型作为一个散列变量的关键: (不是这个精确地)使用class作为散列键?
def add_to_cache(obj)
@cache[obj.class] = [] unless @cache.has_key? obj.class
@cache[obj.class] << obj
end
所以我很好奇,如果任何人都可以解释。有一些缺点吗?它如何存储在内存中?我应该将它(obj.class)转换为符号还是字符串?
在ruby中,您可以让任何对象成为哈希键。该对象的方法hash
被称为实际哈希。我认为这种方法已经足够优化,足够用于Class
。不需要在这里将类转换为字符串或符号。
我在猜测你的目标可能是跟踪某个类的所有实例。如果是这种情况,那么你不需要,也不应该手动缓存它们。要获得类klass
的所有实例,请执行以下操作:
ObjectSpace.each_object(klass).to_a
这是一个非常简单的例子,只是为了解释自己,谢谢,虽然很高兴知道这样的事情。我爱红宝石。无论如何,你知道如何使用它的性能? –
Nah。无论如何,类本身就是一个对象。任何红宝石都是对象,你可以自由使用它们。 – texasbruce