1
私はスカラを初めて使い、抽象型のメンバから継承することに問題があります。このコードは、私がスケーラに慣れ親しむために構築しているビヘイビアツリーライブラリの基礎です。私は最善の問題を表して何かに私のコードを単純化していますクラスが囲むクラスではないというエラーを引き起こす抽象型を継承します
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