Hier ist mein Versuch:Was ist der beste Weg, um kreisförmige Listen mit Scala zu definieren?
case class A(val a: A, val b: Int){
override def toString() = b.toString
}
lazy val x: A = A(y, 0)
lazy val y: A = A(z, 1)
lazy val z: A = A(x, 2)
Das Problem kommt, wenn etwas mit x zu tun versuchen; Wenn x veranlaßt wird, beginnt es mit einer kreisförmigen Auswertung, die x, y, z durchläuft und endet in einem Stapelüberlauf. Gibt es eine Möglichkeit zu spezifizieren, dass val a träge berechnet werden sollte?
+1 für die Proxy Beispiel verwenden können; Das ist ziemlich sexy. Irgendwelche Nachteile dieser Methode? Wie verhält sich die Gleichheit für die Klasse A? –
Wahrscheinlich der prominenteste ist, dass es eine zusätzliche Instanz benötigt, nur um Ihr Feld faul zu machen. Die erste (manuelle) Lösung verwendet ein Standard-Lazy-Wert, und diese benötigen nur ein Bit (im Gegensatz zu einem Objekt) pro Wert. –