0

您好,我是 ruby​​ 编程的新手。在我的项目中运行 rubocop 检查,它说:

方法行数过多。[13/10] 定义刷新状态

这是我的方法:

def refresh_status
    lost = false
    in_progress = false
    won = false
    @bets.each do |bet|
      lost = true if bet.result == :lost
      if bet.result == :canceled
        @to_return /= bet.odd
        won = true
      end
      in_progress = true if bet.result == :in_progress
      won = true if bet.result == :won
    end
    def_result_after_refresh(lost, in_progress, won)
  end

  def def_result_after_refresh(lost, in_progress, won)
    if lost
      @result = :lost
    elsif in_progress
      @result = :in_progress
    elsif won
      @result = :won
    end
  end

找不到使该方法更短的方法,也许您可​​以提供帮助?

4

1 回答 1

1

你可以使用一些Enumerable方法。

def refresh_status
  @to_return /= @bets.select { |bet| bet.result == :canceled }.map(&:odd).reduce(1, :*)

  results = @bets.map { |bet| bet.result == :cancelled ? :won : bet.result }.uniq
  @result = case
            when results.include?(:lost) then :lost
            when results.include?(:in_progress ) then :in_progress 
            when results.include?(:won) then :won
            end
end
于 2015-11-15T12:51:41.457 回答