A late val is a single-assignment val that can be assigned after definition. Subsequent
assignments raise an error, and dereferencing a late val before assignment also raises an error.
val x = new LateVal[Int]
...
x.deref // BAD
x.assign(3) // Good
x.deref // Good
x.assign(4) // BAD
A LateVal[X] can be used as an X, via the implicit conversion LateVal. Moreover, the method
names LateVal.assign and LateVal.deref are chosen to minimize shadowing whatever methods will be
available on X; in particular, LateVal.set and LateVal.get would shadow methods for many common
choices of X.
val x = new LateVal[Int]
x.assign(3)
x + 1
val x = new LateVal[Map[Int, String]]
x.assign(Map(1 -> "one"))
x.get(1)
A late val is a single-assignment val that can be assigned after definition. Subsequent assignments raise an error, and dereferencing a late val before assignment also raises an error.
val x = new LateVal[Int] ... x.deref // BAD x.assign(3) // Good x.deref // Good x.assign(4) // BAD
A LateVal[X] can be used as an X, via the implicit conversion LateVal. Moreover, the method names LateVal.assign and LateVal.deref are chosen to minimize shadowing whatever methods will be available on X; in particular, LateVal.set and LateVal.get would shadow methods for many common choices of X.
val x = new LateVal[Int] x.assign(3) x + 1
val x = new LateVal[Map[Int, String]] x.assign(Map(1 -> "one")) x.get(1)