Guest User

Untitled

a guest
May 20th, 2018
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 0.47 KB | None | 0 0
  1. trait Events[+A] { outer =>
  2.   private[this] val listeners = Set[A => Unit]()
  3.  
  4.   def observe(f: A => Unit) {
  5.     listeners += f
  6.   }
  7.  
  8.   def merge[B >: A](that: Events[B]) = new Events[B] {
  9.     override def observe(f: B => Unit) {
  10.       outer.observe(f)
  11.       that.observe(f)
  12.     }        
  13.   }
  14.  
  15.   def allListeners[B <: A]: List[B => Unit] = listeners.toList
  16. }
  17.  
  18. trait EventSource[T] extends Events[T] {
  19.   def raise(x: T) {
  20.     allListeners.foreach(_(x))
  21.   }
  22. }
Add Comment
Please, Sign In to add comment