Dado que me siento como un principiante (en comparación con DPP y Amber) Me podría explicar a un principiante en un idioma principiantes :
En primer lugar, la función anónima (o bloque de código/expresión lambda) es simplemente una función que no tiene un nombre. Podría estar relacionado con una variable como esta.
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
Verá, la función no tiene el nombre foo, podría llamarse desde la barra en su lugar.
En segundo lugar, un cierre es una función anónima que tiene una variable que no está definida dentro de la función (la variable/valor debe haberse declarado antes de que se defina la función). El término "cierre completo" puede referirse a esta funcionalidad.
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
La primera vez que vea esto, se preguntará para qué sirve. En resumen, tiene muchos sectores de aplicación :-)
Esto es exactamente lo que estaba buscando. ¡Gracias un montón! – northpole
@Jesper: No, no funcionaría si hice x final. Me gustaría obtener un mensaje de error diferente. ;) Podría hacer x una matriz int final con solo un elemento ... –
@Jesper, las modificaciones hechas a los contenidos de la matriz 'final' dentro de la' Runnable' serán visibles en todos los ámbitos donde la matriz es visible. –