2016-12-04 20 views
0

誰かが私を助けることができますか? Scalaのインタープリタを使用した後オーバーライド値....ソリューションタイプのクラス.....値は.....互換性のない型(スカラ)

abstract class Puzzle { 

    val sections : List[Int] 

    val valid : (Position => Boolean) 

    val initSoln : Solution 

    val initDir : Direction 

} 

case class StandardPuzzle() extends Puzzle { 

    val sections = snake 

    val valid = inCube(3)_ 

    val initSoln = List(List(1,1,1)) 

    val initDir = (0,0,1) 

} 

:この問題を解決するために行うことです何

<console>:22: error: overriding value initSoln in class Puzzle of type Solution; 
value initSoln has incompatible type 

val initSoln = List(List(1,1,1)) 

はあなたの問題を解決するために):)非常に

+0

問題は 'List [List [Int]]'を返すメソッドで 'Solution'を返すメソッドをオーバーライドしようとしていることです。したがって、 'Puzzle'の' initSoln'シグネチャを 'List [Int]]'を返すか 'StandardPuzzle'の' Solution'のインスタンスを返すように変更することができます。しかし、あなたが 'Solution'クラスの定義を私たちに提供しなければ、それを手助けすることはできません。 – adamwy

答えて

0

をありがとう、私はあなたが唯一のケースクラスで定義されヴァルスがでDEFSを上書きします、その時点でDEFSにあなたの抽象クラスでヴァルスを変更する必要があると思います抽象クラス...しかし

abstract class Puzzle { 

    def sections : List[Int] 

    def valid : (Position => Boolean) 

    def initSoln : Solution 

    def initDir : Direction 

} 

、私もあなたがいることを助言する...コンストラクタのパラメータではなく、ハードよりも、それらをコーディングを受け入れるようにcase classを再書き込み

case class StandardPuzzle() extends Puzzle { 

    val sections = snake 

    val valid = inCube(3)_ 

    val initSoln = List(List(1,1,1)) 

    val initDir = (0,0,1) 

} 

...うまくいけば、あなたはより多くを提供する必要がない場合は、動作すること

val puzzle = StandardPuzzle(snake, inCube(3)_, List(List(1,1,1)), (0,0,1)) 

...次のようにStandardPuzzleのインスタンスを作成し、その後...

case class StandardPuzzle(sections: List[Int], valid : (Position => Boolean), initSoln: Solution, initDir : Direction) extends Puzzle 

なり...と問題の詳細、特にSolutionタイプの定義を知る必要があります。

関連する問題