定义
type TA[T] = T => Int
implicit class TAOps[T](a: TA[T]) {
def foo(): Unit = {println("TA")}
}
val ta: TA[Double] = x => x.toInt
现在,
ta.foo()
无法编译该消息value foo is not a member of ammonite.$sess.cmd1.TA[Double]
,
而显式调用
TAOps(ta).foo()
版画TA
。为什么在前一种情况下隐式转换不起作用?
您的隐式def期望一个接收一个类型参数的类型,即 TA[T]
您的声明:val ta: TA[Double] = ...
它是一个自身的类型,并且不接受任何类型参数。因此,编译器将不会使用您的隐式def进行类型检查。
结束语对于具有类型参数TA[Double]
且不具有任何类型参数的类型,您具有隐式类型转换。
Function1
: implicit class TAOps[T](a: T => Int) {
def foo: Unit = {
println("TA")
}
}
implicit class TAOps[T](a: ({type Alias = TA[T]})#Alias) {
def foo: Unit = {
println("TA")
}
}
在这里,您创建的类型被管理。因此,编译器现在将将此隐式转换应用于匹配的类型,不再期望接收1个类型参数的类型。
有关Lambda类型的更多信息
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句