Scala non permette di creare vaze laze, solo lazy vals. Ha senso.fare una var lazy in scala
Ma mi sono imbattuto in caso d'uso, dove mi piacerebbe avere capacità simili. Ho bisogno di un titolare variabile pigro. Potrebbe essere assegnato un valore che dovrebbe essere calcolato da un algoritmo dispendioso in termini di tempo. Ma può essere successivamente riassegnato ad un altro valore e mi piacerebbe non chiamare affatto il calcolo del primo valore.
Esempio presumere che vi sia qualche definizione magia var
lazy var value : Int = _
val calc1 :() => Int = ... // some calculation
val calc2 :() => Int = ... // other calculation
value = calc1
value = calc2
val result : Int = value + 1
Questo pezzo di codice deve chiamare solo CALC2(), non CALC1
Ho un'idea come posso scrivere questo contenitore con conversioni implicite e e classe contenitore speciale. Sono curioso se c'è qualche caratteristica scala integrata che non richiede a scrivere codice non necessario
+1 per la seconda opzione – paradigmatic
Questa non è una soluzione corretta dal momento che non cattura la natura "caching" di un pigro. Cioè ogni volta che si valuta lv.value la funzione verrà rieseguita (in questo esempio stamperà ancora e ancora). –