Dar*_*911 2 scala runtime-error forward-reference case-class
我是Scala的新手.我正在制作一个游戏,我有一个角色可以访问的类型列表Location.我有一个案例类和一个伴随对象来实现这一目标.
LinkedLocationsinside Location是一个类型数组,Location可以包含一个位置可以导致的任意数量的位置.在这种情况下,1号房间通向2号房间,反之亦然.
case class Location(name: String, desc: String, linkedLocations: Array[Location]){}
object Location {
val none: Location = Location("none","none",Array(none))
val room1: Location = Location("room 1","you are in room 1",Array(room2))
val room2: Location = Location("room 2","you are in room 2",Array(room1))
room1.linkedLocations.foreach(location=>println(location.name))
}
Run Code Online (Sandbox Code Playgroud)
我试过让它们变得懒惰,但最终会出现堆栈溢出.如何修复这样的引用问题?有没有更好的方法来设计这个?
这看起来像图形表示 - 通常通过将图形节点(在这种情况下为位置)与图形边缘(链接位置)分离来避免前向引用.您可以通常通过哈希映射查找相邻信息.就像是:
case class Location(name: String, desc: String)
object Location {
val none: Location = Location("none","none")
val room1: Location = Location("room 1","you are in room 1")
val room2: Location = Location("room 2","you are in room 2")
val neighborMap: Map[Location, Array[Location]] = Map(
room1 -> Array(room2),
room2 -> Array(room1)
)
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
neighborMap(room1).foreach(location => println(location.name))
Run Code Online (Sandbox Code Playgroud)