2013-12-13 1 views
0

루비 클래스에서는 주어진 모듈을 포함 할 때 변수 값을 저장하고 싶습니다. 나는이에게 방법 (attr_accessor, set_constant, 등)하지만 최종 결과는 항상 동일 임의의 수를 시도했습니다루비 : 포함 시간에 값 저장

module M 
    def self.included(base) 
    base.class_eval do 
     @@inclusion_time = Time.now 

     def included_at 
     @@inclusion_time 
     end 
    end 
    end 
end 

class A 
    include M 
end 

sleep 3 

class B 
    include M 
end 

sleep 3 

class C 
    include M 
end 

a = A.new 
b = B.new 
c = C.new 

puts a.included_at 
puts b.included_at 
puts c.included_at 

: 다음은 인위적인 예입니다. 모든 클래스에는 마지막으로 설정된 값이 있습니다.

어떻게 해결할 수 있습니까?

답변

2
module M 
    def self.included _ 
    @inclusion_time = Time.now 
    end 
    def included_at 
    self.class.instance_eval{@inclusion_time} 
    end 
end 
+0

내가 당신과 SO의 모듈 M을 교체 할 때,'A.new.included_at'는, (물론, B 및 C에 대한 동일) 전무를 반환 klass.instance_variable_set 데프 self.included (KLASS)'반면 (@ inclusion_time, Time.now) end'는 원하는 결과를 제공합니다. 'self.included'에서 self는 M과 같습니다. –