Scala 意外地编译了一个文件,是否存在隐式转换?
Scala unexpectedly compiles a file, are there implicit conversions at work?
我想弄清楚为什么下面的 classes 在 Scala 中编译没有错误。
我希望 DoTest
class 中的 createTestClass
方法因输入错误而失败,因为它试图提供类型为 TypeClass[A]
的隐式参数,而不是这样的例如,它提供类型为 A => String
.
的 lambda
这里有隐式转换吗?我将如何着手弄清楚发生了什么?
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")
}
Scala 2.12 引入了一项新功能:lambda syntax for SAM (Single Abstract Method) types。这就是您在这里看到的。
我想弄清楚为什么下面的 classes 在 Scala 中编译没有错误。
我希望 DoTest
class 中的 createTestClass
方法因输入错误而失败,因为它试图提供类型为 TypeClass[A]
的隐式参数,而不是这样的例如,它提供类型为 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")
}
Scala 2.12 引入了一项新功能:lambda syntax for SAM (Single Abstract Method) types。这就是您在这里看到的。