私はscalaを学んでおり、次のコードに出くわしました。
def whileLoop(cond: => Boolean)(body: => Unit): Unit =
if (cond) {
body
whileLoop(cond)(body)
}
var i = 10
whileLoop (i > 0) {
println(i)
i -= 1
}
出力は 10 対 1 の数字です。
したがって、cond と body はどちらも「名前による呼び出し」パラメーターです。つまり、関数で使用されたときに評価されます。私がそれを正しく理解していれば。私が理解していないのは、体がどのように
println(i)
i -= 1
適用される再帰の各レベルごとに変化し、変数 i が変化するにつれて本体が変化します。しかし、それはどのように正確に機能しますか?同じ関数本体が渡されるたびに、この関数は同じままですが、プログラムを実行すると、そうでないことがわかります。関数が毎回評価されることは知っていますが、内部の i 変数が毎回どのように変化するのか理解できないので、誰かがそれがどのように機能するか説明できますか?