продолжать получать - SystemStackError: уровень стека слишком глубокий - PullRequest
0 голосов
/ 06 июня 2019

Мой код запускается, когда я тестирую его в программе, но когда я пытаюсь запустить Rspec в коде, он выдает ошибку

rails--version
Rails 5.2.3

ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x64-mingw32]

Я пытался сделать переменные общедоступными, а также удалить переменные и записатькод по-разному

Тестовый файл

require 'sort'
describe Sorter do
    let (:sort) { Sorter.new }
    let (:array) {array[10,6,2,1,5,4,3,9,8,7]}
    context "Sort Low To High" do
        it "Goes From 1 - 10" do
            expect(sort.sortup(array)).to eql([1,2,3,4,5,6,7,8,9,10])
        end
    end
    context "Sort High To Low" do
         it "Goes From 10 - 1" do
            expect(sort.sortdown(array)).to eql([10,9,8,7,6,5,4,3,2,1])
        end
    end
end

Основной файл

class Sorter
    def sortup array
        j = 0
        while j < array.length - 1
            i = 0; 
            while i < array.length - 1
                if(array[i] > array[i+1])
                    temp = array[i+1]
                    array[i+1] = array[i]
                    array[i] = temp
                end
                i += 1
            end
            j += 1
        end
        array
    end
end
Failure/Error: Unable to find matching line from backtrace

     SystemStackError:
       stack level too deep

1 Ответ

1 голос
/ 06 июня 2019
let (:array) {array[10,6,2,1,5,4,3,9,8,7]}

Способ работы let заключается в том, что он по существу определяет метод, имя которого - Symbol, которое вы передаете let, а тело - это блок.Таким образом, это, по сути, эквивалентно

def array
  array[10,6,2,1,5,4,3,9,8,7]
end

. Как видите, array вызывает себя, и нет никаких условий, чтобы он прекратил это делать, поэтому вы получаете бесконечную рекурсию.Решение простое: не вызывайте его самому.

Не совсем ясно, чего вы пытаетесь достичь с помощью этого звонка, поэтому я не могу дать лучший совет, к сожалению.

...