Si consideri il seguente:Scala di nome e argomenti di default in combinazione con i parametri impliciti
def f(implicit a: String, y: Int = 0) = a + ": " + y
implicit val s = "size"
println(f(y = 2))
L'ultima espressione provoca il seguente errore:
not enough arguments for method f: (implicit a: String, implicit y:
Int)java.lang.String. Unspecified value parameter a.
Tuttavia, se si fornisce un valore di default per l'implicito parametro a, non vi è alcun problema:
def f(implicit a: String = "haha!", y: Int = 0) = a + ": " + y
implicit val s = "size"
println(f(y = 2))
Ma l'ultima riga stampa s
haha!: 2
mentre mi sarei aspettato
size: 2
Quindi 's' il valore implicito non viene prelevato. Se invece non forniscono alcuna parametri f e basta chiamare
println(f)
allora il valore implicito viene raccolto e si ottiene
size: 0
Qualcuno può far luce su quello che sta succedendo qui?
Si dovrebbe controllare che la portata implicito che implicitamente utilizza. Non penso sia uguale alla seconda opzione. – jsuereth