Проблема
Я пытаюсь написать метод (Array # bubble_sort), который принимает необязательный аргумент proc.
Если задана процедура, метод должен отсортировать массив в соответствии с процедурой.
Когда не указан proc, метод должен сортировать массив в порядке возрастания.
Рекурсивно, это прекрасно работает без добавления процедуры, однако, когда мне дают неизвестный процесс, я не могу найти способ передать его обратно в качестве аргумента.
Код
class Array
def bubble_sort(&prc)
prc = Proc.new{|a,b| a <=> b} if !prc
self.each_with_index do |ele,idx|
if prc.call(self[idx],self[idx+1]) == 1
self[idx],self[idx+1] = self[idx+1], self[idx]
self.bubble_sort(&prc)
end
end
self
end
end
Тестовый код
[4, 12, 2, 8, 1, 14, 9, 25, 24, 81].bubble_sort
возвращает ожидаемые результаты [1, 2, 4, 8, 9, 12, 14, 24, 25, 81]
[4, 12, 2, 8, 1, 14, 9, 25, 24, 81].bubble_sort { |a, b| a.to_s <=> b.to_s }
возвращает слишком большую ошибку на уровне стека вместо ожидаемого результата [1, 12, 14, 2, 24, 25, 4, 8, 81, 9]