数据加载一次,因为加载需要一段时间,不会改变,并且是共享的。这是一个静态类:我没有使用任何实例。
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?或者有更好的方法吗?
最佳答案
是的,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
关于ruby-on-rails - 如何在 Ruby 中调用加载类变量的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9987185/