Поскольку я чувствую, как новичок (по сравнению с DPP и Amber) я мог бы объяснить новичок в языке начинающих :
Во-первых, анонимная функция (или кодовый блок/выражение лямбда) - это просто функция, которая не имеет имени. Он может быть привязан к такой переменной.
scala> val foo = (x: Int) => 2*x
foo: (Int) => Int = <function1>
scala> val bar = foo
bar: (Int) => Int = <function1>
scala> bar(5)
res2: Int = 10
Вы видите, что функция не имеет имени foo, ее можно было бы вызывать из бара.
Во-вторых, замыкание является анонимной функцией, которая имеет переменную, которая не определена внутри функции (переменная/значение должно быть объявлено до определения функции). Термин «полное питание» может относиться к этой функции.
scala> var constant = 7
constant: Int = 7
scala> val foo = (x: Int) => 2*x + constant
foo: (Int) => Int = <function1>
scala> foo(5)
res3: Int = 17
scala> constant = 6
constant: Int = 6
scala> foo(5)
res4: Int = 16
Первый раз, когда вы видите это, вы можете задаться вопросом, для чего это полезно. Короче говоря, он имеет много секторов применения :-)
Это именно то, что я искал. Огромное спасибо! – northpole
@Jesper: Нет, это не сработает, если я сделаю x final. Я бы просто получил другое сообщение об ошибке. ;) Я мог бы сделать x окончательным массивом int только с одним элементом ... –
@Jesper, изменения, внесенные в содержимое массива 'final' из« Runnable », будут видны в каждой области видимости массива. –