yo soy un poco confundido por la diferencia en el tipo de verificación entre los curry y uncurried funciones genéricas:Unificación de tipo genérico: parámetros múltiples (T, T) frente a listas de parámetros múltiples (T) (T)?
scala> def x[T](a: T, b: T) = (a == b)
x: [T](a: T, b: T)Boolean
scala> def y[T](a: T)(b: T) = (a == b)
y: [T](a: T)(b: T)Boolean
Mi intuición era que tanto x(1, "one")
y y(1)("one")
debe dar errores de tipo, pero estaba equivocado:
scala> x(1, "one")
res71: Boolean = false
scala> y(1)("one")
<console>:9: error: type mismatch;
found : java.lang.String("one")
required: Int
y(1)("one")
^
al principio pensé que había algún tipo de conversión implícita pasando, pero eso no parece ser el caso:
scala> x(1 :Int, "one" :String)
res73: Boolean = false
Entonces, ¿qué está pasando? ¿Cuál debería ser mi intuición?
He visto un duplicado de esto hace mucho tiempo. También creo que este caso [casi] exacto está documentado en el SLS. –
Ahí vamos. He actualizado el título con el importante término "listas de parámetros múltiples", que se analiza en el SLS :) –