Czy można utworzyć klasę z niezmiennym odnośnikiem do obiektu partnerskiego, czy musi to być var
, który przypiszę po utworzeniu?Wywoływanie niezmiennych sparowanych obiektów
np.
class PairedObject (p: PairedObject, id: String) {
val partner: PairedObject = p // but I need ref to this object to create p!
}
lub w podobny sposób, w jaki sposób mogę utworzyć kolejną parę?
class Chicken (e: Egg) {
val offspring = e
}
class Egg (c: Chicken) {
val mother = c
}
Pomysłowy! Testowane ... działa –
Dodałem także rozwiązanie dla obiektu PairedObject. Zauważyłem również, że vals dla "chicken" i "egg" nie muszą być leniwe. Ściśle nie trzeba uwzględniać typów dla obu, jak można wywnioskować. –
To rozwiązanie zadziała, jeśli zostanie wprowadzone na najwyższym poziomie definicji "klasy" lub "obiektu", ale otrzyma niedozwolony błąd odniesienia do przodu, jeśli "kurczak" i "jajko" są zmiennymi lokalnymi (np. Wewnątrz funkcji). Rozwiązaniem, które działa w dowolnym zakresie, jest: 'lazy val (jajko: jajko, kurczak: kurczak) = ...', które może być samo-referencyjne. –