我想实现一个“map”方法,以便返回具体的容器子类型。
的内容trait Result[+T, Self[A] <: Result[A, Self]] {
def map[A](f: T => A): Self[A]
}
case class Value[T](t: T) extends Result[T, Value[T]] {
override def map[A](f: (T) => A): Value[A] = Value(f(t))
}
但是这不能编译。有什么遗失的吗?
答案 0 :(得分:0)
&#34;结果&#34;的第二个参数类型需要更高的类型:不是&#34;值[T]&#34;,而是简单&#34;值&#34;代替。
trait Result[+T, Self[A] <: Result[A, Self]] {
def map[A](f: T => A): Self[A]
}
case class Value[T](t: T) extends Result[T, Value] {
override def map[A](f: T => A): Value[A] = Value(f(t))
}
val v = Value(1)
v.map(x ⇒ (x * 2) + "ab") // Value(2ab)