Von was ich verstanden habe, behandelt Scala Val-Definitionen als Werte. Also sollte jede Instanz einer Fallklasse mit gleichen Parametern gleich sein. AberWarum evaluiert jede neue Instanz von Fallklassen in Scala wieder Lazy Vals?
case class A(a: Int) {
lazy val k = {
println("k")
1
}
val a1 = A(5)
println(a1.k)
Output:
k
res1: Int = 1
println(a1.k)
Output:
res2: Int = 1
val a2 = A(5)
println(a1.k)
Output:
k
res3: Int = 1
Ich hatte erwartet, dass für println (A2.k), ist es nicht k gedruckt werden soll. Da dies nicht das erforderliche Verhalten ist, wie soll ich das implementieren , so dass für alle Instanzen einer Fallklasse mit denselben Parametern nur eine Lazy Val-Definition nur einmal ausgeführt werden soll. Benötige ich eine Memo-Technik oder kann Scala alleine damit umgehen?
Ich bin sehr neu zu Scala und funktionale Programmierung so bitte entschuldigen Sie mich, wenn Sie die Frage trivial finden.
Sie sind verschiedene Klasseninstanzen im Speicher, natürlich werden sie zweimal initialisiert? Sie sollten das Companion-Objekt von 'A' verwenden, wenn Sie nur eine Instanz haben möchten ... –