Sto giocherellando intorno alla mia domenica pomeriggio e sto cercando di creare una sorta di "stanza". Fondamentalmente, un oggetto Room
ha un numero di uscite, ciascuna delle quali si riferisce ad altri Room
s. Ora, la prima cosa che sto cercando di creare è la connessione di due Room
, preferibilmente in una singola istruzione di assegnazione. Come questo:Come faccio a fare riferimento a una variabile mentre assegna un valore ad essa, pur conservando l'immutabilità?
case class Room(title: String, exits: Map[Direction.Direction, Room])
val firstRoom = Room("A room", Map(North -> Room("Another room", Map(South -> firstRoom))))
Ergo: in camera si ha un'uscita North
a due camera, camera a due ha un'uscita South
tornare a una camera.
Tuttavia, come potete immaginare, questo va storto: il valore firstRoom
val non viene definito durante la sua creazione, quindi provare a fare riferimento ad esso durante il suo incarico non funzionerà.
Sono sicuro che questo è vero per la maggior parte, se non tutti i linguaggi di programmazione. La mia domanda: come risolvo questo senza rendendo il mio oggetto Room
mutabile? Posso semplicemente creare alcuni oggetti Room
e aggiungere successivamente le uscite, ma ciò rende il Room
s mutabile e, come esercizio personale, cerco di evitarlo.
Risposta epica, ti meriti tutti i voti che puoi ottenere. Non solo fornisci una risposta semplice, ma anche una più profonda su una funzione linguistica che non avevo ancora avuto la possibilità di utilizzare o di trovare uno scopo. Mi sono imbattuto in flussi una o due volte durante la ricerca di questa risposta, ma non avevo idea di come avrebbero risolto questo problema. Molto obbligato. – fwielstra