返回trait的Scala方法能返回与trait类型相同的方法吗



我正在尝试写一个看起来像这样的东西:

trait interface {
getA(a:_): trA 
}
trait trA extends (x => y)

并且该特性被实现为:

object obX extends interface {
override def getA(a:_): x => y = X => ???
}

然而,我得到错误

Overriding type a => x => y does not conform to base type a => trA

即使CCD_ 1接收CCD_。有办法绕过这个吗?是我修改特征界面的唯一选项,比如:

trait interface {
getA(a:_): x => y
}

提前感谢!

即使trA接收x => y

这是错误的。trAx => y,但相反的情况是不是真:x => y是<em]不是>trAtrA不能从trA0生成。

您使用比interface允许的更宽的返回类型定义obX

例如,如果您可以使trA不扩展x => y,而是使其成为,则您的代码将被编译

type trA = x => y

否则,您可以引入一种类型的

trait interface {
type Out >: trA
def getA(a: _): Out
}
object obX extends interface {
type Out = x => y
override def getA(a: _): x => y = X => ???
}

最新更新