Scala Züge und implizite Konvertierung Verwirrung
-
27-09-2019 - |
Frage
Die folgenden Zeilen arbeiten, wenn ich sie mit der Hand auf dem Scala REPL eingeben (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
Allerdings, wenn ich versuche, Datei zu kompilieren damit ich die folgende Fehlermeldung erhalten:
[error] myTrait.scala:37: expected start of definition
[error] implicit def myTraitToString(input: myTrait): String = input.toString
[error] ^
Warum?
Danke!
Lösung
Funktionen können nicht auf der obersten Ebene definiert werden. Setzen Sie myTraitToString
in einem (Begleiter, wenn Sie mögen) Objekt:
object myTrait {
implicit def myTraitToString(input : myTrait) : String = input.ToString
}
Und dann ist es in dem Gültigkeitsbereich bringen:
import myTrait._
Wenn myTraitToString in Umfang ist - das heißt, wenn Sie es ohne Punkte nennen könnte -. Implizit angewendet wird
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow