Thursday, October 29, 2015

Exploring Scala.rx

You can see more here.

package tutorial.webapp

import scala.scalajs.js.JSApp
import scala.scalajs.js.annotation.JSExport

/**
 * Created by IDEA on 29/10/15.
 */
import rx._

object TestRx extends JSApp {
  def main: Unit = {
    demo
    observe
    listInVar
    omg
    nest1
  }

  def nest1: Unit = {
    val a = Var(1)
    val b = Rx(
      (Rx(a() * 2), Rx(math.random))
    )
    val r = b()._2()
    println("random number: ", r)
    val r1 = b()._2()
    println("random number: ", r1)
    a() = 2
    println("First nested", b()._1())
    println("Second nested", b()._2())
  }

  def demo: Unit = {
    val a = Var(1)
    val b = Var(2)
    val c = Rx {
      a() + b()
    }
    println(c())
    a() = 4
    println(c())
  }

  def observe: Unit = {
    val x1: Var[Int] = Var(1)
    var count = 0
    val x1Obs = Obs(x1, skipInitial = true) {
      count = x1() + 1
      println("count: " + count)
    }
    x1() = 3
    x1Obs.kill()
    x1() = 5
  }


  def listInVar: Unit = {
    val x2 = Var(List(1, 2, 3))
    val x2Rx = Rx(x2().sum)
    val x2RxObs = Obs(x2Rx) {
      println("x2 sum: " + x2Rx())
    }
    x2() ++= List(4)
    x2() ++= List(5, 6)
  }

  def omg: Unit = {
    val a = Var(Seq(1, 2, 3))
    val b = Var(3)
    val c = Rx{ b() +: a() }
    val d = Rx{ c().map("omg" * _) }
    val e = Var("wtf")
    val f = Rx{ (d() :+ e()).mkString }
    println(f()) // "omgomgomgomgomgomgomgomgomgwtf"
    a() = Nil
    println(f()) // "omgomgomgwtf"
    e() = "wtfbbq"
    println(f()) // "omgomgomgwtfbbq"
  }
}

0 comments: