如何在Ruby中通过类方法初始化类变量

时间:2014-03-19 00:20:42

标签: ruby-on-rails ruby

有一种简单的方法可以通过Ruby中的类方法初始化类变量吗?我正在尝试这个:

class MyClass
    @@product_families = MyClass.load_pgrollups(File.join(File.dirname(__FILE__), ASSETS_FOLDER_NAME, PGROLLUP_CSV_FILENAME))

    def self.load_pgrollups(csv_file)                                                                                                                                        
       ....

       return product_families
    end

我得到一个例外:未定义的方法`load_pgrollups'用于ModuleName :: myClass:Class

我不一定要初始化一个类变量。我还尝试通过模块函数

初始化模块中的常量
module ModuleName
    PRODUCT_FAMILIES = load_pgrollups(File.join(File.dirname(__FILE__), ASSETS_FOLDER_NAME, PGROLLUP_CSV_FILENAME))

    def load_pgrollups(csv_file)                                                                                                                                        
       ....

       return product_families
    end

但我为MyModule获取了未定义的方法`load_pgrollups':模块

2 个答案:

答案 0 :(得分:5)

定义后调用它:

class myClass
  def self.load_pgrollups(csv_file)                                                                                                                                        
    ....
    return product_families
  end
  @@product_families = load_pgrollups(File.join(__dir__, ASSETS_FOLDER_NAME, PGROLLUP_CSV_FILENAME))
end

答案 1 :(得分:2)

您可以在第4行中定义方法,但是您已在第2行调用它,但尚未定义它。所以,是的,该方法在您调用它时未定义。