Scala закрытие
Закрытие является функцией, которая возвращает значение, зависящее от внешней декларации в функции или более переменных.
Затворы Вообще считается просто еще одна функция внутри функции может получить доступ к локальным переменным.
Эта анонимная функция, как:
val multiplier = (i:Int) => i * 10
Тело функции имеет переменную I, в качестве параметра функции. Еще один фрагмент кода вроде следующего:
val multiplier = (i:Int) => i * factor
Есть две переменные в умножитель: я и фактор. Где я является формальным параметром функции, функция вызывается, когда множитель, я получил новое значение. Тем не менее, фактор не формальные параметры, но свободные переменные, рассмотрим следующие коды:
var factor = 3 val multiplier = (i:Int) => i * factor
Здесь мы вводим свободный переменный фактор, эта переменная определена вне функции.
Мультипликатор переменные функции, таким образом, определяется как "закрытие", поскольку оно относится к переменной вне определения функции, определение процесса этой функции является захват свободные переменные образуют замкнутую функцию.
Полный пример
object Test { def main(args: Array[String]) { println( "muliplier(1) value = " + multiplier(1) ) println( "muliplier(2) value = " + multiplier(2) ) } var factor = 3 val multiplier = (i:Int) => i * factor }
Реализация указанного выше кода, выход:
$ scalac Test.scala $ scala Test muliplier(1) value = 3 muliplier(2) value = 6