The following lines work when I enter them by hand on the 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
However, if I try to compile file with it I get the following error:
[error] myTrait.scala:37: expected start of definition
[error] implicit def myTraitToString(input: myTrait): String = input.toString
[error] ^
Why?
Thanks!
Functions can’t be defined at the top level. Put
myTraitToStringin a (companion, if you like) object:And then bring it into scope:
Whenever myTraitToString is in scope — i.e. when you could call it without any dots — it will be applied implicitly.