簡體   English   中英

不斷接收-SystemStackError:堆棧級別太深

[英]keep receiving - SystemStackError: stack level too deep

當我在程序中對其進行測試時,我的代碼將運行,但是當我嘗試在該代碼上運行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
 let (:array) {array[10,6,2,1,5,4,3,9,8,7]} 

let工作方式是從本質上定義一個方法,該方法的名稱是您傳遞給letSymbol ,主體是塊。 所以,這基本上等於

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

如您所見, array調用自身,並且沒有任何條件可以停止這樣做,因此您可以獲得無窮的遞歸。 解決方案很簡單:不要讓它自己調用。

目前尚不清楚您要通過此電話實現的目標,因此很遺憾,我無法提供更好的建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM