2017-04-06 1 views
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") 

} 

答えて

関連する問題