2012-04-03 5 views
2

로드하는 데 시간이 걸리고 변경되지 않으며 공유되므로 데이터가 한 번로드됩니다. 이것은 정적 클래스입니다 : 인스턴스를 사용하고 있지 않습니다. load_data가 할당 한 후에 나타나기 때문에Ruby에서 클래스 변수를로드하는 메소드를 호출하는 방법은 무엇입니까?

class Foo 
    @@ data = self.load_data 

    def self.load_data 
    . 
    . 
    . 
    end 

    def self.calculate 
    . 
    . 
    end 
end 

이 오류 NoMethodError: undefined method 'load_data' for Foo:Class가 발생합니다.

f = Foo.new을 사용하지 않아서 초기화가 작동하지 않는다고 생각합니다. 나는 Foo.calculate으로 사용하고 있습니다.

그것을 호출하기 전에 load_data를 선언 할 필요가 있습니까? 아니면 더 나은 방법이 있습니까? 클래스 수준의 함수 호출에 의해

답변

2

예 Foo.load_data는 사용자가 호출 한 시점에 아직 존재하지 않습니다.

더 나은 패턴은 자동 memoizes @@ 데이터에 대한 접근을 할 수 있습니다.

class Foo 
    def self.data 
    @@data ||= load_data 
    end 
    def data; self.class.data; end # if you need it in instances too 

    def self.load_data 
    ... 
    end 

    def self.calculate 
    data.each {} # or whatever would have used @@data 
    end 
end 
0

데이터를로드합니다.

class Foo 
    def self.load_data 
    . 
    . 
    . 
    @data = value 
    end 

    def self.calculate 
    #use @data in this function. 
    . 
    . 
    end 
end 

#first load data 
Foo.load_data 

#then process data 
Foo.calculate 
+0

'Foo.calculate'는 cron 작업을 통해 실행되므로'load_data'를 호출 할 시간이 없습니다. 이 경우 자동으로로드하는 것이 낫습니다 ... –

+0

그런 다음 calculate 메서드에서 load_data를 호출합니다. –

관련 문제