私はMartin Oderskyのscala bookを使っていました。このコードでは第10章(組成物および継承)では:nEdges
は、反復ごとにデクリメントしつつある、Scalaの本からのスカラ再帰の説明
val sp = spiral(nEdges - 1, (direction + 3) % 4)
私の理解にAccoording:
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)
}
}
私はコードがラインを超えてどのように流れるかを理解することができませんspiral
関数が呼び出され、1に達すると(つまり終了条件)、elem
関数を介してオブジェクトが作成されます。
このコードをテストしてnEdges
の値を印刷すると、それはspiral
の上の行が機能するまで減少し、その行の後でインクリメントを開始します。誰が私にこのことが起こっているか説明することができますか?
ありがとうございます。