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 myTraitToString
in a (companion, if you like) object:
object myTrait {
implicit def myTraitToString(input : myTrait) : String = input.ToString
}
And then bring it into scope:
import myTrait._
Whenever myTraitToString is in scope -- i.e. when you could call it without any dots -- it will be applied implicitly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With