Я изучаю scala, и я натолкнулся на следующий код.Динамически меняющиеся функции 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.
Так как дир и тело «вызов по имени» параметров. Это означает, что они оцениваются при использовании в функции. Если я это правильно пойму. То, что я не понимаю, как тело
println(i)
i -= 1
изменения для каждого уровня рекурсии, который применяется тело меняются, так как переменный я меняюсь. Но как это работает? Каждый раз, когда тот же самый тег функции передается, мне эта функция остается неизменной, но запуск программы показывает мне иначе. Я знаю, что функция оценивается каждый раз, но я не понимаю, как переменная i изменяется каждый раз, поэтому кто-нибудь может объяснить мне, как это работает?
Таким образом, внешнее значение я, который, как представляется, выходит за рамки тела и состояние по-прежнему ссылается внутри тела? Как это технически выполнено? – Juru
@ Juru 'i' находится в окружающей среде как тела, так и состояния. Я обновил ответ, пытаясь сделать функции более явными. Что касается технической реализации закрытий, я рекомендую прочитать [Википедия] (http://en.wikipedia.org/wiki/Closure_ (computer_programming) #Implementation_and_theory) и [этот вопрос на SO] (http://stackoverflow.com/q/11657676/4041697) –