Scala nie pozwala tworzyć laze vars, tylko leniwych vals. To ma sens.Zrobić leniwy var w scala
Ale ja wpadł na przypadek użycia, gdzie chciałbym mieć podobną funkcję. Potrzebuję leniwego właściciela zmiennej. Można mu przypisać wartość, którą należy obliczyć za pomocą czasochłonnego algorytmu. Ale może być później ponownie przypisana do innej wartości i nie chciałbym w ogóle wywoływać obliczeń pierwszej wartości.
przykład zakładając, że jest jakaś definicja magii 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 kawałek kodu powinien wywołać tylko CALC2(), nie CALC1
mam pomysł jak mogę napisać ten pojemnik z ukrytych konwersji i i specjalna klasa kontenerów. Jestem osobliwości jeśli jest jakaś wbudowana funkcja scala, które nie wymagają mi napisać niepotrzebnego kodu
+1 dla drugiej opcji – paradigmatic
To nie jest poprawne rozwiązanie, gdyż nie uchwycić „buforowania” natury leniwy. To znaczy. za każdym razem, gdy ocenisz wartość lv.fue, funkcja zostanie ponownie wykonana (w tym przykładzie będzie drukowana wielokrotnie). –