1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
case class Property[T](private var t: T) { var beforeChanges: List[(T, T) => Unit] = Nil var afterChanges: List[T => Unit] = Nil def apply = t def update(t2: T) = { beforeChanges foreach (_(t, t2)) t = t2 afterChanges foreach (_(t2)) } } object Test { def main(args: Array[String]): Unit = { val x = Property(10) x update 25 assert(x.apply == 25) } }