2012-04-03 5 views
2

ロードに時間がかかり、変更されず、共有されているため、データが1回読み込まれます。これは静的なクラスです:私はインスタンスを使用していません。Rubyでクラス変数をロードするメソッドを呼び出す方法は?

class Foo 
    @@ data = self.load_data 

    def self.load_data 
    . 
    . 
    . 
    end 

    def self.calculate 
    . 
    . 
    end 
end 

これは、割り当て後にload_dataが表示されるため、エラーNoMethodError: undefined method 'load_data' for Foo:Classがスローされます。

f = Foo.newを使用していないため、初期化は機能しません。私はFoo.calculateとして使用しています。

load_dataを呼び出す前に宣言する必要がありますか?それとも良い方法がありますか?

答えて

2

はいFoo.load_dataは、あなたが呼び出した時点ではまだ存在しません。

より良いパターンは、自動的にメモをとる@@ dataのアクセサーを持つことです。

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

次に、計算メソッドからload_dataを呼び出します。 –

関連する問題