次のコード スニペット (scala 2.10.3 を使用)では、 TestClass1はエラー「value toInt is not a member of String」でコンパイルされませんが、 TestClass2は正常にコンパイルされます。
trait TestTrait {
implicit def test: (String => Int)
}
object TestClass1 extends TestTrait {
implicit val test = (value: String) => value.toInt
}
object TestClass2 extends TestTrait {
implicit def test = (value: String) => value.toInt
}
toInt関数を提供するaugmentString()によるStringOpsの暗黙的な変換は、 TestClass1 では適用されませんが、 TestClass2では適切に適用されます。なぜこれが当てはまるのか、またtestをdefの代わりにvalに保つ方法を教えてもらえますか?