斯卡拉性状和隐式转换混乱
-
27-09-2019 - |
题
当我的手在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
不过,如果我尝试编译文件,它,我收到以下错误:
[error] myTrait.scala:37: expected start of definition
[error] implicit def myTraitToString(input: myTrait): String = input.toString
[error] ^
为什么?
谢谢!
解决方案
的函数不能在顶层限定。放myTraitToString
在(伴侣,如果你喜欢)对象:
object myTrait {
implicit def myTraitToString(input : myTrait) : String = input.ToString
}
和然后使之范围:
import myTrait._
每当myTraitToString是在范围 - 即当你可以把它没有任何点 - 这将被隐式应用
不隶属于 StackOverflow