È possibile creare una classe con un riferimento immutabile a un oggetto partner oppure deve essere un var
che si assegna dopo la creazione?Instantiating di oggetti accoppiabili immutabili
ad es.
class PairedObject (p: PairedObject, id: String) {
val partner: PairedObject = p // but I need ref to this object to create p!
}
o analogamente, come è possibile creare un'istanza della coppia successiva?
class Chicken (e: Egg) {
val offspring = e
}
class Egg (c: Chicken) {
val mother = c
}
Ingegnoso! Testato ... funziona –
Ho aggiunto anche la soluzione per PairedObject. Inoltre ho scoperto che i valori per 'chicken' e' egg' non hanno bisogno di essere pigri. Rigorosamente non è necessario includere i tipi per entrambi, come si può dedurre. –
Questa soluzione funzionerà se inserita al livello più alto di una definizione 'class' o' object', ma si ottiene un errore di riferimento forward illegale se 'chicken' e' egg' sono variabili locali (ad esempio all'interno di una funzione). Una soluzione che funziona in qualsiasi ambito è: 'lazy val (egg: Egg, chicken: Chicken) = ...', che può essere autoreferenziale. –