有人能帮助我吗?
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 :(得分:0)
为了解决你的问题,我认为你只需要改变抽象类中的val来定义case类中定义的val将覆盖抽象类中的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
类型的定义。