1
以下のクラスがScalaでエラーなくコンパイルされる理由を理解しようとしています。 クラスのcreateTestClass
メソッドはタイプTypeClass[A]
の暗黙的なパラメータを提供しようとしているのでタイプエラーで失敗することが予想されますが、そのようなインスタンスではなくタイプA => String
のラムダを提供します。Scalaはファイルを予期せずコンパイルしますが、暗黙の変換が行われていますか?
ここでは暗黙の変換がありますか?何が起こっているのか把握するにはどうすればいいですか?
object Test {
trait TypeClass[A] {
def asString(a: A): String
}
object TypeClass {
def apply[A: TypeClass]: TypeClass[A] = implicitly[TypeClass[A]]
}
case class TestClass[A: TypeClass](foo: Option[A] = None)
object TestClass {
def apply[A: TypeClass]: TestClass[A] = TestClass[A]()
}
}
object DoTest {
import Test.TestClass
def createTestClass[A]: TestClass[A] =
TestClass.apply[A]((_: A) => "test")
}