Ok

En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies. Ces derniers assurent le bon fonctionnement de nos services. En savoir plus.

Un peu de Scala

Voici un framework pubsub de la mort qui tue... 

 

trait Idable {

   val id = Bus.getId

   def pub = Bus.pub(this)

   def sub(p:Idable, f:()=>Unit) = Bus.sub(p,f)

}

object Bus {

val H = collection.mutable.HashMap[Long,List[()=>Unit]]()

def pub(p:Idable):Unit = H.get(p.id).map(fs=>fs.map(f=> f()))

def sub(p:Idable, f:()=>Unit):Unit = H.put(p.id,f :: H.get(p.id).getOrElse (List()))

var ID = 0

def getId:Long = {ID+=1; ID}

}

Il s'utilise assez simplement: 

 

class Person (val name:String, var age:Int) extends Idable {
  def setAge(x:Int) = {age = x; pub}
}
object Main extends App with Idable {
  val p = new Person("me",33)
  sub(p, ()=> println("p notified " + p.age))
  p.setAge(34)
}

 

On utilise ici les closures bien sur, mais surtout les traits: Idable contient le comportement nécessaire à la signalisation via l'objet singleton Bus et aussi l'interface d'utilisation : pourvu qu'on soit "Idable", l'id et le Bus sont absolument invisibles. 

Viva Scala ! 

 

 

Commentaires

  • https://github.com/lihaoyi/scala.rx
    est un framework récent, plus puissant que ces quelques lignes...

Les commentaires sont fermés.