斯卡拉性状和隐式转换混乱时,我的手在斯卡拉REPL进入他们
问题描述:
以下行工作(2.7.7):斯卡拉性状和隐式转换混乱时,我的手在斯卡拉REPL进入他们
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在范围上 - 即当你可以把它没有任何点 - 它将被隐式应用。
+0
真棒,那就是诀窍! – pr1001 2010-04-17 23:19:25
正如我在REPL定义中注意到的,它隐式地放在类中。 – Alexey 2010-04-18 08:57:36