2015-11-15 4 views
-1

Здравствуйте, я новичок в программировании ruby. Ran rubocop в моем проекте, и он говорит:Rubocop: метод имеет слишком много строк

Метод имеет слишком много линий. [13/10] Защита refresh_status

Вот мои методы:

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 

Не можешь найти способ, чтобы сделать этот метод короче, может быть, вы могли бы помочь?

+0

Все ваши условия, сравнивающие 'bet.result'. Вы можете использовать оператор 'case', чтобы сделать ваш код более выразительным, но, возможно, не короче. Поэтому вы можете выполнить инициализацию в одной строке: «lost», «in_progress», «won» = «false», «false», «false»). – sschmeck

+0

rubocop не разрешает использовать параллельную (одну строку) assingsments @sschmeck – user3662708

ответ

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 
+0

, так как я сказал, что я новичок, так вы могли бы сказать, что такое карта (&: odd)? Я знаю, что он помещает выбранные элементы в список, но что такое '&: odd'? @sschmeck – user3662708

+0

Хороший вопрос. 'bets.map (&: odd)' строит новый массив из массива ставок, где все ставки заменяются (или сопоставляются) по значению bet.odd. Это ярлык для 'bets.map {| bet | bet.odd} '. Помогает ли это? 'reduce' очень похож. – sschmeck

+0

есть. Для полного приема rubocop мне нужно было сделать строки короче и 'когда results.include? (: Won) then: lost' не совсем прав, это должно быть' когда results.include? (: Won) then: won' by by way I примет ваш ответ – user3662708

Смежные вопросы