如何调用方法在Ruby中加载类变量?

时间:2012-04-03 04:36:55

标签: ruby-on-rails ruby class static-methods static-variables

数据加载一次,因为它需要一段时间才能加载,不会更改,并且是共享的。这是一个静态类:我没有使用任何实例。

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?或者有更好的方法吗?

2 个答案:

答案 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