1
我是scala的新手,并且无法从抽象类型成员继承。该代码是我构建自己习惯scala的行为树库的基础。我简化了我的代码的东西最能代表这个问题:继承导致错误的抽象类型,说该类不是一个封闭的类
trait Task {
type DataIn
type DataOut
def run(item: DataIn): (Boolean,Option[DataOut])
}
trait TaskContainer extends Task {
def task: Task
}
case class ResultInverter[I](override val task: Task{
type DataIn = ResultInverter.this.DataIn})
extends TaskContainer {
type DataIn = I
type DataOut = Nothing
override def run(item: DataIn): (Boolean,Option[DataOut])={
val taskOut = task(item)
if (taskOut._1 == true) ((false,None))
else (true,None)
}
}
object TaskTest extends App {
val isPositive = new Task {
type DataIn = Int
type DataOut = Nothing
override def run(item: DataIn): (Boolean,Option[DataOut])={
(item > 0, None)
}
}
println(ResultInverter[Int](isPositive(1)._1))
}
这给错误
error: ResultInverter is not an enclosing class
type DataIn = ResultInverter.this.DataIn})
^
error: Task{type DataIn = } does not take parameters
val taskOut = task(item)
^
error: stable identifier required, but .this found.
type DataIn = ResultInverter.this.DataIn})
^
error: Task{type DataIn = Int; type DataOut = Nothing} does not take parameters
val isNegative = ResultInverter[Int](isPositive(1)._1
我认为错误是从线路type DataIn = ResultInverter.this.DataIn
到来。我试图将其更改为type DataIn = ResultInverter#DataIn
,但在错误方面变化很小。我在java中编程之前,所以会使用类型参数,而不是类型成员,但我很确定该类型的成员建议。
感谢您的帮助
您的回复。很高兴知道更多关于类型成员的信息,并感谢在调用apply方法时指出我的错误。这是我错过的一种错误,如果有人没有指出它,错过了。 – Nat2726