7

次の行は、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]          ^

なんで?

ありがとう!

4

1 に答える 1

13

トップレベルで関数を定義することはできません。(必要に応じて、コンパニオンmyTraitToString)オブジェクトを配置します。

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

そして、それをスコープに入れます。

import myTrait._

myTraitToStringがスコープ内にある場合、つまりドットなしで呼び出すことができる場合は常に、暗黙的に適用されます。

于 2010-04-17T22:44:50.763 に答える