Используйте охрану для исключения рубинового преобразования, если еще - PullRequest
1 голос
/ 17 октября 2019

Rubocop продолжает выдавать мне сообщение об ошибке: используйте защитное предложение (raise "no block" if not block_given?) вместо того, чтобы оборачивать код в условное выражение.

# frozen_string_literal: true

def bubble_sort_by(arr)
    if block_given?
        swap = -1
        while swap != 0
            swap = 0
            (0..(arr.length - 2)).each do |i|
                if yield(arr[i], arr[i + 1]).positive?
                    arr[i], arr[i + 1] = arr[i + 1], arr[i]
                    swap += 1
                end
            end
        end
    else
        raise "no block"
    end
    arr
end

#given test
bubble_sort_by(["hey", "hello", "hi"]) {|left, right| left.length - right.length
}

Пробовал, если, но все еще то же самое, и я нене понимаю, как мне перейти к пункту охраны.

1 Ответ

0 голосов
/ 17 октября 2019

Если у вас есть if-else, охватывающий все тело метода, и else только переносит, вызывая ошибку, вы можете изменить рефакторинг на:

def bubble_sort_by(arr)
  raise "no block" unless block_given?
  swap = -1
  while swap != 0
    swap = 0
    (0..(arr.length - 2)).each do |i|
      if yield(arr[i], arr[i + 1]).positive?
        arr[i], arr[i + 1] = arr[i + 1], arr[i]
        swap += 1
      end
    end
  end
  arr
end

У вас есть условие вверху и основная частьметода после него.

...