2017-06-14 7 views
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でプログラミングしていたので、型メンバーの代わりに型パラメーターを使用していましたが、型メンバーが推奨されていることは間違いありません。あなたの助け

答えて

1

ため

ありがとうございます、コンストラクタのシグネチャにthisを参照することはできません。現時点ではコンストラクタが呼び出されると、まだthisはありません。あなたの場合は、代わりにIを使用することができます。あなたは(a(b)a.apply(b)に変換)applyメソッドを呼び出そうと、しかしTaskだけrunメソッドを持っているので、

case class ResultInverter[I](task: Task{ type DataIn = I }) extends TaskContainer { ... } 

他のエラーがあります。

+0

あなたの返信用です。メンバーのタイプについてもっと知り、applyメソッドを呼び出すときに間違いを指摘してくれてありがとう。誰かがそれを指摘していなければ、私が逃したミスのミスです。 – Nat2726

関連する問題