ruby-on-rails - 如何在 Ruby 中调用加载类变量的方法?

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

最佳答案

是的,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/

相关文章:

c++ - Functor - 他们对其他没有实现运算符 ( ) 的类有什么权力

mysql - Ruby on Rails 使用 WHERE 子句丰富了许多 :many,

ruby-on-rails - 如何 stub /模拟 Rails 2.3 中功能测试的辅助方法?

ruby-on-rails - 在 Ruby 中实例化一个类并填充实例变量

python - 从 ruby​​ 调用 python 脚本

java - 错误: constructor Miclass in class Miclass cannot be applied to given types;

ruby-on-rails - 与Ruby on Rails一起使用的最佳Google Analytics(分析)工具是什么?

ruby - 从 github 源安装的 Gem 未在 `gem list` 中显示

javascript - jquery 显示/隐藏 block 中的 Ruby 变量

python - 类 httpresponse 结果为 405 - django