En Scala, puedo definir una función con dos listas de parámetros.scala currying por funciones anidadas o por listas de parámetros múltiples
def myAdd(x :Int)(y :Int) = x + y
Esto hace que sea fácil definir una función parcialmente aplicada.
val plusFive = myAdd(5) _
Pero puedo lograr algo similar definiendo y devolviendo una función anidada.
def myOtherAdd(x :Int) = {
def f(y :Int) = x + y
f _
}
Estéticamente, he movido el guión bajo, pero esto todavía se siente como currying.
val otherPlusFive = myOtherAdd(5)
¿Qué criterios debo usar para preferir un enfoque sobre el otro?
Gracias, Daniel. Su comentario sobre la inferencia de tipo como la motivación para las listas de parámetros múltiples es revelador. Esto fue realmente útil. –
La otra motivación es escribir DSL que se integren bien en el lenguaje, algo así como 'using (x) {...}'. Aunque esto, ciertamente, también hace uso del tipo de inferencia otorgada a múltiples bloques. –