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!

War es hilfreich?

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
scroll top