Scala no permite crear laze vars, solo flojos vals. Tiene sentido.make azy var in scala
Pero he tropezado con el caso de uso, donde me gustaría tener una capacidad similar. Necesito un titular variable perezoso. Se le puede asignar un valor que debe calcularse mediante un algoritmo que consume mucho tiempo. Pero luego puede ser reasignado a otro valor y me gustaría no llamar el primer cálculo de valor en absoluto.
Ejemplo suponiendo que haya alguna definición 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
Esta pieza de código sólo debe llamar CALC2(), no CALC1
tengo una idea de cómo puedo escribir este recipiente con conversiones implícitas y y clase de contenedor especial. Estoy curiosidades si hay alguna característica Scala integrado que no requiere a escribir código innecesario
+1 por la segunda opción – paradigmatic
Esto no es una solución correcta, ya que no captura la naturaleza "caching" de un perezoso. Es decir. cada vez que evalúe lv.value, la función se volverá a ejecutar (en este ejemplo, se imprimirá una y otra vez). –