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))
Другие вопросы по тегам