Scala прямая ссылка
Я новичок в Скале. Я делаю игру, и у меня есть список мест, которые персонаж может посетить, типа Location
, У меня есть класс case и сопутствующий объект для достижения этой цели.
LinkedLocations
внутри 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))
}
Я пытался сделать их ленивыми, но в итоге получилось переполнение стека. Как исправить подобные проблемы с ссылками вперед? Был бы лучший способ спроектировать это?
1 ответ
Это похоже на представление графа - обычно прямых ссылок избегают, отделяя узлы графа (в данном случае местоположения) от краев графа (связанных местоположений). Вы можете искать соседнюю информацию, как правило, через хэш-карту. Что-то вроде:
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)
)
}
И тогда вы можете сделать:
neighborMap(room1).foreach(location => println(location.name))