zrobić leniwego var in scala

Scala nie zezwala na tworzenie leniwych vars, tylko leniwych vals. To ma sens.

Ale natknąłem się na przypadek użycia, w którym chciałbym mieć podobne możliwości. Potrzebuję leniwego zmiennego uchwytu. Może zostać przypisana wartość, która powinna być obliczana przez czasochłonny algorytm. Ale może być później przypisany do innej wartości i nie chciałbym w ogóle nazywać obliczenia pierwszej wartości.

Przykład zakładając, że istnieje jakaś magiczna definicja var

lazy var value : Int = _
val calc1 : () => Int = ... // some calculation
val calc2 : () => Int = ... // other calculation
value = calc1
value = calc2
val result : Int = value + 1

Ten fragment kodu powinien wywoływać tylko calc2 (), a nie calc1

Mam pomysł, jak mogę napisać ten kontener z niejawnymi konwersjami i specjalną klasą kontenerów. Jestem ciekaw, czy istnieje wbudowana funkcja scala, która nie wymaga ode mnie pisania niepotrzebnego kodu

questionAnswers(5)

yourAnswerToTheQuestion