Estoy jugando mi domingo por la tarde y estoy tratando de crear una estructura tipo 'habitación'. Básicamente, un objeto Room
tiene un número de salidas, cada una de las cuales se refiere a otras Room
s. Ahora, lo primero que intento crear son dos Room
s conectados entre sí, preferiblemente en una sola declaración de asignación. De esta manera:¿Cómo me refiero a una variable mientras le asigno un valor, mientras que retiene la inmutabilidad?
case class Room(title: String, exits: Map[Direction.Direction, Room])
val firstRoom = Room("A room", Map(North -> Room("Another room", Map(South -> firstRoom))))
Ergo: habitación uno tiene una salida North
a la habitación dos, sala de dos tiene una salida South
volver a la habitación uno.
Sin embargo, como se puede imaginar, esto va mal: el firstRoom
val no está definido al crearlo, por lo que intentar consultarlo durante su asignación no funcionará.
Estoy bastante seguro de que esto es cierto para la mayoría de los lenguajes de programación, si no para todos. Mi pregunta: ¿Cómo puedo resolver esto sin haciendo mutable mi objeto Room
? Simplemente puedo crear algunos objetos Room
y agregarles las salidas, pero eso hace que el Room
sea mutable, y como ejercicio personal trato de evitarlo.
Respuesta épica, mereces todos los votos a favor que obtienes. No solo proporciona una respuesta simple, sino también una más profunda acerca de una función de idioma que no había tenido la oportunidad de usar todavía o que tenía un propósito. Encontré las transmisiones una o dos veces al buscar esta respuesta, pero no tenía ni idea de cómo iban a resolver esto. Muy agradecido. – fwielstra