Ruby 初始化期间调用实例方法的形式是否糟糕?

Ruby 初始化期间调用实例方法的形式是否糟糕?,ruby,class,Ruby,Class,我正在考虑改进以下类的方法,突然想到:在初始化过程中调用实例方法是不是很糟糕? 最初,我将方法设置为\u last\u updated\u作为“run”方法中的第一行,我可能会将其保留在那里,但问题仍然如前所述 class FinancialUpdateService def initialize(stock) @stock = stock set_last_updated_on end def run fetch_latest_financial_data

我正在考虑改进以下类的方法,突然想到:在初始化过程中调用实例方法是不是很糟糕?

最初,我将方法设置为\u last\u updated\u作为“run”方法中的第一行,我可能会将其保留在那里,但问题仍然如前所述

class FinancialUpdateService
  def initialize(stock)
    @stock = stock
    set_last_updated_on
  end

  def run
    fetch_latest_financial_data
    remove_duplicate_data
    store_latest_financial_data  
  end

  private

  def set_last_updated_on
    @last_updated_on = @stock.financials.first.date.to_date
  end

  def fetch_latest_financial_data
    @latest_financial_data = StockDataApi.new(@stock.symbol, {start_date: @last_updated_on, end_date: Date.today-1}).financial_history
  end

  def remove_duplicate_data
    @latest_financial_data.delete_if { |data| data[:date].to_date <= @last_updated_on}
  end

  def store_latest_financial_data
    @latest_financial_data.each do |d| 
      @stock.financials.create(adj_close: d.fetch(:adj_close), close: d.fetch(:close),
      date: d.fetch(:date).to_time, high: d.fetch(:high), low: d.fetch(:low), open: d.fetch(:open),
      volume: d.fetch(:volume))
    end
  end
end
class FinancialUpdate服务
def初始化(库存)
@股票=股票
设置上次更新
结束
def运行
获取最新的财务数据
删除重复的数据
存储最新的财务数据
结束
私有的
def set_last_updated_on
@上次更新日期=@stock.financials.first.date.to\u日期
结束
def获取最新的财务数据
@最新的财务数据=StockDataApi.new(@stock.symbol,{开始日期:@last\u updated\u on,结束日期:date.today-1})。财务历史记录
结束
def删除重复数据

@最新的财务数据。如果{数据{数据}数据[:日期],则删除。到日期这不是类方法,而是实例方法

不,这不是糟糕的形式。在
initialize
中调用一个方法是完全正常和可取的

当您调用子类重写的方法时,问题就开始了


由于实例尚未完全实例化,且被重写的方法可能假定为完全实例化的实例,因此可能会出现异常行为,例如,属性可能未初始化。

哦,伙计,新手错误。我关注的是这个问题,当它显然是实例方法时,我称它为类方法。谢谢你的回答。initialize初始化对象,所以调用私有方法来设置状态是很正常的。