2016-12-04 7 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) 

} 

после использования интерпретатора Scala:

<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

Проблема в том, что вы пытаетесь переопределить метод, который должен возвращать 'Solution' методом, который возвращает' List [List [Int]] '. Таким образом, вы можете либо изменить подпись 'initSoln' в' Puzzle', чтобы вернуть 'List [List [Int]]' или вернуть экземпляр 'Solution' в' StandardPuzzle'. Но мы не можем с этим справиться, если вы не дадите нам определение класса «Решение». – adamwy

ответ

0

Чтобы решить проблему, я думаю, вам нужно всего лишь изменить Vals в своем абстрактном классе DEFS, на этом этапе Vals, определенные в классе случае перекроют 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) 

} 

... становится ...

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

... а затем создать экземпляр StandardPuzzle следующим образом ...

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

Хотелось бы надеяться, что будет работать, если вы не нужны, чтобы обеспечить более подробно о проблеме, в частности, нам нужно знать определение типа Solution.