Domanda su Scala conversioni implicite non-ambiguità Rule
-
09-10-2019 - |
Domanda
Qualcuno mi potrebbe spiegare seguente situazione con Scala meccanismo di conversioni implicite. C'è un codice:
object Main {
implicit val x:Int => String = v => "val"
implicit def y(v:Int) = "def"
def p(s:String) = print(s)
def main(args: Array[String]): Unit = {
p(1)
}
}
Questa stampe codice "val". Ma quando io commento seconda linea:
//implicit val x:Int => String = v => "val"
stampe codice "def".
Quindi entrambi conversioni implicite (xey) sono possibili in questa situazione. C'è un Non ambiguità regola - una conversione implicita viene inserito solo se non c'è altra possibile conversione da inserire. Secondo questa regola questo codice non deve essere compilato a tutti. Ma il codice viene compilato ed eseguito con successo. Quello che non capisco?
Grazie.
Soluzione
La ragione di ciò è indicato nella sezione Scala Language Specification 6.26.2.
Prima il metodo può essere trattato come una funzione che deve essere convertito in un eseguendo eta-espansione. Quindi una conversione più implicito dovrebbe essere applicato e quindi la val
viene scelto.
Aggiorna : esempio rimosso viziata ??p>.
La valutazione di un metodo senza parametri viene sempre eseguita in modo implicito.