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!

È stato utile?

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