fechamento Scala
O encerramento é uma função que retorna um valor dependente da declaração externa em uma função ou mais variáveis.
Closures considerado geralmente para ser simplesmente uma outra função dentro de uma função pode acessar as variáveis locais.
Esta função anônima como o seguinte:
val multiplier = (i:Int) => i * 10
corpo da função tem um i variável, como um parâmetro de função. Outro pedaço de código como o seguinte:
val multiplier = (i:Int) => i * factor
Existem duas variáveis na multiplicador: i e fator. Onde i é um parâmetro formal da função, a função é chamada quando o multiplicador, me foi dado um novo valor. No entanto, o fator não é os parâmetros formais, mas as variáveis livres, considere os seguintes códigos:
var factor = 3 val multiplier = (i:Int) => i * factor
Aqui nós introduzimos um fator variável livre, esta variável é definida fora da função.
variáveis da função multiplicadores assim definido como um "fecho", porque se refere a uma variável fora da definição de função, a definição do processo desta função é a de capturar as variáveis livres constituem uma função fechada.
exemplo completo
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 }
Implementação do código acima, a saída é:
$ scalac Test.scala $ scala Test muliplier(1) value = 3 muliplier(2) value = 6