tratti Scala e implicita la confusione di conversione
-
27-09-2019 - |
Domanda
Le seguenti linee funzionano quando li inserisco a mano sul Scala REPL (2.7.7):
trait myTrait {
override def toString = "something"
}
implicit def myTraitToString(input: myTrait): String = input.toString
object myObject extends myTrait
val s: String = myObject
Tuttavia, se provo a compilare il file con esso ottengo il seguente errore:
[error] myTrait.scala:37: expected start of definition
[error] implicit def myTraitToString(input: myTrait): String = input.toString
[error] ^
Perché?
Grazie!
Soluzione
Le funzioni non può essere definita a livello superiore. Mettere myTraitToString
in un (compagno, se vi piace) oggetto:
object myTrait {
implicit def myTraitToString(input : myTrait) : String = input.ToString
}
E poi portarlo in ambito:
import myTrait._
Ogni volta myTraitToString è portata - vale a dire quando si potrebbe chiamare senza puntini -. Esso verrà applicato implicitamente
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow