class DefinedOr[T] { var _v:Option[T] = None def this(n:T) = { this(); this.v = n } def v:Option[T] = _v def v_=(v:T) = { _v = Some(v) } def ||=(n:T) = { v = v match { case None => n; case Some(x) => x } } } object Main { def main(args:Array[String]) = { var d:DefinedOr[Int] = new DefinedOr println(d.v) d ||= 0 println(d.v) d ||= 1 println(d.v) d = new DefinedOr(2) println(d.v) d ||= 0 println(d.v) } }