Pergunta

As seguintes linhas funcionam quando eu as digito manualmente no 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

No entanto, se eu tentar compilar o arquivo com ele, recebo o seguinte erro:

[error] myTrait.scala:37: expected start of definition
[error] implicit def myTraitToString(input: myTrait): String = input.toString
[error]          ^

Por quê?

Obrigado!

Foi útil?

Solução

As funções não podem ser definidas no nível superior. Colocar myTraitToString em um objeto (companheiro, se quiser):

object myTrait {
    implicit def myTraitToString(input : myTrait) : String = input.ToString
}

E então traga -o para o escopo:

import myTrait._

Sempre que o mytraittostring estiver em escopo - ou seja, quando você pode chamá -lo sem pontos -, será aplicado implicitamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top