2013-10-29 3 views
3

는 난 그냥 내가 해시 변수에 대한 키로 클래스 형식을 사용하고 있음을 깨달았다 : 을 (하지이 정확하게) 사람이 그것을 설명 할 수있는 경우 클래스를 해시 키로 사용 하시겠습니까?

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

그래서 내가 궁금합니다. 몇 가지 단점이 있습니까? 어떻게 메모리에 저장됩니까? 나는 그것을 (obj.class)를 Symbol이나 String으로 변환해야 하는가?

+0

Nah. 클래스 자체는 어쨌든 객체입니다. 루비에있는 것은 객체이고 자유롭게 사용할 수 있습니다. – texasbruce

답변

4

루비에서는 모든 객체를 해시 키로 사용할 수 있습니다. 객체의 hash 메소드는 실제 해시를 호출합니다. 이 방법은 충분히 최적화되어 있으며 Class에 충분할 것으로 가정합니다. 여기서 클래스를 문자열이나 기호로 변환 할 필요가 없습니다.

2

귀하의 목표는 특정 클래스의 모든 인스턴스를 추적하는 것일 수 있습니다. 이 경우 수동으로 캐시 할 필요가 없으며 캐시해서는 안됩니다. 클래스 klass의 모든 인스턴스를 가져 오려면 다음을 수행하십시오.

ObjectSpace.each_object(klass).to_a 
+0

이것은 매우 단순한 예일뿐입니다. 나는 루비를 사랑해. 어쨌든, 이것을 사용하는 것이 얼마나 효과적인지 알고 있습니까? –

관련 문제