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