我正在閱讀Martin Odersky撰寫的scala書。在第10章(成分組合及繼承),在此代碼:Scala書籍的Scala遞歸解釋
def spiral(nEdges: Int, direction: Int): Element = {
if (nEdges == 1) {
elem("+")
}
else {
println(s"nEdgesInside1=$nEdges")
val sp = spiral(nEdges - 1, (direction + 3) % 4)
def verticalBar = elem('|', 1, sp.height)
def horizontalBar = elem('-', sp.width, 1)
println(s"nEdgesInside2=$nEdges")
if (direction == 0)
(corner beside horizontalBar) above (sp beside space)
else if (direction == 1)
(sp above space) beside (corner above verticalBar)
else if (direction == 2)
(space beside sp) above (horizontalBar beside corner)
else
(verticalBar above corner) beside (space above sp)
}
}
我無法理解的代碼超過行是如何流動的:
val sp = spiral(nEdges - 1, (direction + 3) % 4)
Accoording我的理解,nEdges
是越來越減少。在每次迭代調用函數spiral
,一旦達到1(即終止條件),它將通過elem
函數創建對象。
當我測試這個代碼並打印nEdges
的值時,它會遞減,直到上面的函數調用spiral
函數,並且在那行之後它開始遞增。任何人都可以向我解釋這是怎麼發生的。
在此先感謝