在Ruby类初始化方法中调用if-else和方法

时间:2013-10-30 22:48:46

标签: ruby initialization

我的代码实际上有效,但我不确定这是否是正确的方法。它的目的是允许每天只修改一次文件。有很多代码,但大致看起来像这样:

class Something
  def initialize
    if file_modified_today
      load_file
      #it loads variables from a file
    else
      @aaa = rand(1..30)
      # ... lots of other variable assignments
    end 
  end
  def file_modified_today
    #returns true or false
  end
  def load_file
    #reads and loads variables from a file
  end
end

我希望我的代码不会混淆。我的问题是,这种初始化类的方式是错误的吗?我可能想到一种从初始化中删除if-else和方法调用的方法,可能是定义类方法,并在创建实例之前使用它

1 个答案:

答案 0 :(得分:0)

我不完全确定你到底想做什么。但是,这不是initialize对象的最佳方式。

为什么不尝试创建一个类方法呢?

class Something

  def initialize
    @aaa = rand(1..30)
  end

  def self.file
    if file_modified_today?
      load_file
    else
      new() # initialize a new object
    end
  end

  def self.load_file
    #reads and loads variables from a file
  end

  private

  def file_modified_today?
    #returns true or false
  end
end

但是,您可能会考虑采用不同的方法。似乎您只想在当天修改文件时加载文件。你可以在#load_file方法中处理它。这使#file方法过时了。因此,在这种情况下,如果修改了创建新对象的文件,则可以加载文件。

load_file if file_modified_today?