【发布时间】:2016-08-14 15:20:18
【问题描述】:
这个例子是我写的
class TestMatch[T](private val t: T){
def test()(implicit ev: T <:< Option[Int]) = println(ev(t).get)
}
并对其进行测试
val tm = TestMatch(Some(10))
tm.test() //fine
val tm2 = TestMatch(10)
tm2.test() //compilation error
问题是当我调用test 方法时谁创建了implicit ev: T <:< Option[Int]?我知道我没有。也许编译器知道implicit <:< 并且知道如何处理它。
<:<的文档不太清楚
在方法的范围内约束任何抽象类型 T 参数列表(不仅仅是方法自己的类型参数)只需添加 类型的隐式参数
T <:< U,其中U是必需的 上限;或者对于下限,使用:L <:< T,其中L是 要求的下限。
这是否意味着编译器将自行承担其余的工作?我只是添加implicit ev: T1 <:< T2?
【问题讨论】:
-
根据您最近发布的问题,您似乎在 Scala 知识方面存在一些明显的差距。我建议你阅读一本关于 Scala 语言和 Scala 编程的好书。