有没有办法使用F-Bounded多态来定义一个Functor中的map

时间:2016-08-19 01:23:36

标签: scala

我想实现一个“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))
}

但是这不能编译。有什么遗失的吗?

1 个答案:

答案 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)