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

Slimtoni

用可变参数id和fieldStatus声明了case类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为fieldStatus实现了一个方法one FieldGameboard保存Field在S vertexList: MutableList[Field]该方法set仅应更改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)
  }
}

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

Error:(54, 29) value changeFieldStatus is not a member of type parameter Field
      case "Black" => f.changeFieldStatus(FieldStatus.Black)

我也尝试访问case类的成员变量Field...相同的错误。我是否误解了案例类?斯卡拉-docs的didnt有帮助我。

布莱恩·麦卡顿

看起来FieldGameboardtype参数正在遮盖同名的case类。一些可能的解决方案:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章