如何解决Scala类型不匹配,无法解决问题
因此,对于一个项目,我正在尝试使游戏中的特定部分移动。所有坐标都存储在一个列表中,通过“ x”和“ y”值,我应该能够将这些坐标加起来,然后使块移动。
def movement(move: Point): Unit = {
val newList: List[Point] = placed
val xx = move.x; val yy = move.y
for (i <- newList.indices) newList(i) += Point(xx,yy)
}
在这里,“放置”是所有坐标都放置在其中的列表。 “点”类型是指“ x”和“ y”值。
这里的问题是,当我尝试将新值添加到坐标时,它说:
类型不匹配。必填:字符串,找到的是:点
我发现这很奇怪,因为我的列表不是使用字符串类型启动的。有什么办法可以解决此问题?
非常感谢。
添加了先前项目的示例:
var playAnimal: List[Point] = List(Point(2,0),Point(1,Point(0,0))
def checkForWrap (p: Point) : Point = {
var x = p.x; var y = p.y
x = if (x < 0) nrColumns - 1 else if (x > nrColumns - 1) 0 else x
y = if (y < 0) nrRows - 1 else if (y > nrRows - 1) 0 else y
Point(x,y)
}
def moveAnimal(): Unit = {
if(!gameOver) {
def newAnimalFront: Point = {
val newHead: Point = currentDir match {
case East() => playAnimal.head + Point( 1,0)
case West() => playAnimal.head + Point(-1,0)
case north() => playAnimal.head + Point( 0,-1)
case South() => playAnimal.head + Point( 0,1)
}
checkForWrap(newHead)
}
playAnimal = newAnimalFront +: playAnimal.init
}
}
解决方法
您需要做的两件事:
- 在类
Point
中定义方法+
。 - 避免突变(由您决定,但您的代码更具可读性)。
然后您可以这样写:
def main(args: Array[String]): Unit = {
val placed: List[Point] = List(Point(0,0),Point(1,1))
println(placed.mkString) // Point(0,0)Point(1,1)
val moved = movement(Point(2,2),placed)
println(moved.mkString) //Point(2,2)Point(3,3)
}
def movement(move: Point,placed: List[Point]): List[Point] = {
// here you create new list and don't mutate the old one
placed.map(p => p + move)
}
case class Point(x: Int,y: Int) {
def +(p: Point) = Point(x + p.x,y + p.y)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。