[英]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
工作方式是從本質上定義一個方法,該方法的名稱是您傳遞給let
的Symbol
,主體是塊。 所以,這基本上等於
def array
array[10,6,2,1,5,4,3,9,8,7]
end
如您所見, array
調用自身,並且沒有任何條件可以停止這樣做,因此您可以獲得無窮的遞歸。 解決方案很簡單:不要讓它自己調用。
目前尚不清楚您要通過此電話實現的目標,因此很遺憾,我無法提供更好的建議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.