数据加载一次,因为它需要一段时间才能加载,不会更改,并且是共享的。这是一个静态类:我没有使用任何实例。
class Foo
@@ data = self.load_data
def self.load_data
.
.
.
end
def self.calculate
.
.
end
end
这会引发错误NoMethodError: undefined method 'load_data' for Foo:Class
,因为在分配后会出现load_data。
我认为初始化不起作用,因为我没有使用f = Foo.new
。我将其用作Foo.calculate
。
在调用之前是否需要声明load_data?或者有更好的方法吗?
答案 0 :(得分:2)
是Foo.load_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
答案 1 :(得分: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