我试图弄清楚为什么下面的类在 Scala 中编译时没有错误。我希望类中的createTestClass
方法DoTest
会因键入错误而失败,因为它试图提供具有 type 的隐式参数TypeClass[A]
,但它提供了一个带有 type 的 lambda 而不是这样的实例A => String
。
这里有一些隐式转换吗?我将如何弄清楚发生了什么?
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")
}