【发布时间】:2013-12-22 12:03:44
【问题描述】:
考虑这个功能:
def justTrue[T, S](seq: S)(implicit ev: S <:< Seq[T]) = true
justTrue(List(1,2,3))
>> true
它有效。但是为什么不能用同一个签名作为隐式转换呢?
implicit class TruthTeller[T, S](seq: S)(implicit ev: S <:< Seq[T]) {
def justTrue = true
}
List(1,2,3).justTrue
>> error: Cannot prove that List[Int] <:< Seq[T].
隐式转换不只是一个函数吗?
【问题讨论】:
-
确实很奇怪。
val a = new TruthTeller(List(1,2,3))没问题。当您删除type T并使用implicit ev: S <:< Seq[_]时,它也可以工作 -
这正是我问这个问题的原因。我找到了一种解决方法(请参阅下面的答案),但我希望知道为什么原始代码不起作用。