In Scala, perché è possibile passare facilmente una funzione al curry direttamente ad altre funzioni, ma quando lo si assegna a uno val
, è necessario applicarlo parzialmente anche con _
? Ad esempio, date le due funzioni:Perchè Scala richiede l'applicazione parziale delle funzioni al curry quando si assegna a una val?
def curried(a: Int)(b: Int) = a + b
def test(a: Int, f: Int => Int) = f(a)
posso facilmente passare curried
-test
con:
test(5, curried(5))
e tutto è felice. Tuttavia, se ho semplicemente chiamo curried(5)
ottengo un errore:
scala> curried(5)
<console>:9: error: missing arguments for method curried;
follow this method with `_' if you want to treat it as a partially applied function
curried(5)
Se cambio la chiamata a includere informazioni sul tipo tuttavia, funziona:
val 'curried: Int => Int = curried(5)
Qualcuno può spiegare il razionale dietro l'inconsistenza, sicuramente il Il compilatore di Scala può dedurre che la funzione sia Int => Int
data la definizione del tipo sul metodo originale?
Nel caso 'val' se si specifica un'annotazione di tipo non è necessario l'applicazione parziale parziale' _'. –