【发布时间】:2012-10-13 04:12:55
【问题描述】:
我正在尝试在 Scala 2.9.2 中创建一个地图包装器,其值具有特定的更高种类的类型,并且正在与类型系统搏斗。下面是代码的简化版本来说明问题:
trait A
trait B[C] {
def c: C
}
trait E[C <: B[C], D <: A]
case class MyMap[M <: A, L <: B[L], N[L, M]](map: Map[M, N[L, M]])
object MyMap {
def empty[M <: A, L <: B[L], N[L, M]] = MyMap(Map.empty[M, N[L, M]])
}
val myMap = MyMap.empty[A, T forSome { type T <: B[T] }, E]
当我尝试编译它时,最后一条语句失败并出现编译器错误,表明我没有匹配类型边界。但是在我看来,我是这样的,也许在我有 N[L, M] 和以前的 L <: b n m l :>
类型参数的种类 (A,T forSome { type T <: b m l n e c>:Nothing :Nothing :Nothing : Nothing <: any>
val myMap = MyMap.empty[A, T forSome { type T <: b e>
感谢您的任何建议。
谢谢-
【问题讨论】:
标签: scala