5

我在 Scala 2.9.2 实现一个声明依赖返回类型的方法时遇到了麻烦。以下代码

object DependentTypesQuestion {
  def ??? = throw new UnsupportedOperationException
  trait X {
    trait Y
  }
  trait Z {
    def z(x: X): x.Y
  }
  object Z extends Z {
    override def z(x: X): x.Y = ???
  }
}

在 2.9.2 下编译期间会产生以下错误消息:

overriding method z in trait Z of type (x: DependentTypesQuestion.X)x.Y;  method z has incompatible type

在 2.10.0-M4 中,问题似乎已得到解决,但不幸的是,我的项目目前与 2.9 相关联。

是否可以在 2.9.2 中解决此问题?

(或者,是否有 2.9.3 的前景,其中包括 2.10 的反向移植修复?)

4

1 回答 1

3

如果您真的坚持使用 2.9.x,那么以下可能是您的解决方法,

object DependentTypesQuestion {
  def ??? = throw new UnsupportedOperationException
  trait X {
    trait Y
  }
  trait Z[D[_ <: X with Singleton]] {
    def z[T <: X with Singleton](x: T): D[T]
  }

  type Dep[T <: X with Singleton] = T#Y

  object Z extends Z[Dep] {
    override def z[T <: X with Singleton](x: T): x.Y = ???
  }
}
于 2012-08-30T11:49:25.107 回答