在类......解决方案的类.....值.....具有不兼容的类型(scala)

时间:2016-12-04 10:43:56

标签: scala abstract-class

有人能帮助我吗?

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))

解决这个问题该怎么办?

非常感谢你:))

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类型的定义。