Поскольку я чувствую себя новичком (по сравнению с 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, вместо этого ее можно вызывать из bar.
Во-вторых, замыканиеявляется анонимной функцией, у которой есть переменная, которая не определена внутри функции (переменная / значение должны быть объявлены до того, как функция будет определена).Термин «полностью закрытое питание» может относиться к этой функции.
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
Когда вы впервые увидите это, вы можете спросить, для чего он нужен.Короче говоря, он имеет много областей применения: -)