2010-04-17 122 views
7

以下行工作(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]  ^

爲什麼?

謝謝!

+1

正如我在REPL定義中注意到的,它隱式地放在類中。 – Alexey 2010-04-18 08:57:36

回答

13

無法在頂層定義函數。把myTraitToString在(伴侶,如果你喜歡)對象:

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

然後把它納入範圍:

import myTrait._ 

每當myTraitToString在範圍上 - 即當你可以把它沒有任何點 - 它將被隱式應用。

+0

真棒,那就是訣竅! – pr1001 2010-04-17 23:19:25