Scala função currying (Currying)
Currying (Currying) refere-se à função original aceita dois parâmetros em uma nova função aceita um parâmetro do processo. Uma nova função retorna o segundo parâmetro é a função original do parâmetro.
Exemplos
Primeiro, vamos definir uma função:
def add(x:Int,y:Int)=x+y
Assim, quando aplicado, ele deve ser usado como este: adicionar (1,2)
Agora vamos olhar para esta forma mudança de função:
def add(x:Int)(y:Int) = x + y
Assim, quando aplicado, ele deve ser usado assim: add (1) (2), os resultados finais são os mesmos é de 3, esta abordagem (processo) é chamado currying.
processo de implementação
adicionar (1) (2) é realmente uma função por sua vez chama dois (função não-curry) ordinária, a primeira chamada utilizando um parâmetro x, o valor de retorno de um tipo de função, eo segundo parâmetro y chamar este tipo de função valor.
A primeira evoluiu para essencialmente um método:
def add(x:Int)=(y:Int)=>x+y
Em seguida, essa função é o que isso significa? Receber um x como um parâmetro e retorna uma função anônima, a definição da função anônima é: receber um Int argumento y, o corpo da função é x + y. Agora vamos chamar esse método.
val result = add(1)
Retorna um resultado, o valor desse resultado deve ser uma função anônima: (y: int) => 1 + y
Portanto, a fim de obter resultados, continuamos a chamar o resultado.
val sum = result(2)
Finalmente, imprima resultado é 3.
exemplo completo
Aqui está um exemplo completo:
object Test { def main(args: Array[String]) { val str1:String = "Hello, " val str2:String = "Scala!" println( "str1 + str2 = " + strcat(str1)(str2) ) } def strcat(s1: String)(s2: String) = { s1 + s2 } }
Implementação do código acima, a saída é:
$ scalac Test.scala $ scala Test str1 + str2 = Hello, Scala!