Scala值ID不是类型参数字段的成员

时间:2018-12-17 16:50:48

标签: scala typeerror

我用可变参数id和fieldStatus声明了案例类FieldEnumeration FieldStatus

object FieldStatus extends Enumeration {
  type FieldStatus = Value
  val Empty, Black, White = Value
}

case class Field(var id: Int, var fieldStatus: FieldStatus) {
  def changeFieldStatus(fieldStatus: FieldStatus) : Field = copy(id, fieldStatus)
}

在第二个案例类Gameboard中,我实现了一种方法set的{​​{1}}的fieldStatus。 FieldGameboard保存在Field中。 方法vertexList: MutableList[Field]仅应更改所选set的{​​{1}}。

fieldStatus

编译器只会向我抛出此错误:

Field

我还尝试访问案例类case class Gameboard[Field](vertexList: mutable.MutableList[Field], neigh: mutable.MutableList[Edge[Field]]) extends Graph[Field] { def set(field: Int, fieldStatus: String): Gameboard[Field] = { val fieldtoChange: Option[Field] = vertexList.get(field) fieldtoChange match { case Some(f) => { fieldStatus match { case "Black" => f.changeFieldStatus(FieldStatus.Black) case "White" => f.changeFieldStatus(FieldStatus.White) case "Empty" => f.changeFieldStatus(FieldStatus.Empty) } } case None => println("Field not found on this Gameboard!") } copy(vertexList, neigh) } } 的成员变量...相同的错误。我是否误解了案例类? scala-docs并没有帮助我。

1 个答案:

答案 0 :(得分:2)

Gameboard的Field类型参数似乎正在遮盖同名的case类。一些可能的解决方案:

  1. 除去类型参数,然后将其写为case class Gameboard(...) extends Graph[Field],除非您实际上计划使用不同类型的字段。我怀疑这是您要解决的问题。
  2. 重命名类型参数,然后将Field添加为上限,即:class Gameboard[F <: Field]