|
package com.mamoreno |
|
import rx._ |
|
|
|
|
|
object ScalaRxExamples extends App { |
|
printHeader("ScaleraBlog: Scala Rx Example, 1st Post") |
|
ScaleraExamples.Post1.ex1() |
|
|
|
printHeader("ScaleraBlog: Scala Rx Example, 2nd Post. Example 1") |
|
ScaleraExamples.Post2.ex1() |
|
|
|
printHeader("ScaleraBlog: Scala Rx Example, 2nd Post. Example 2") |
|
ScaleraExamples.Post2.ex2() |
|
|
|
printHeader("ScaleraBlog: Scala Rx Example, 2nd Post. Example 3") |
|
ScaleraExamples.Post2.ex3() |
|
|
|
def printHeader(msg: String) { |
|
println("*" * msg.length) |
|
println(msg) |
|
println("*" * msg.length) |
|
} |
|
} |
|
|
|
object ScaleraExamples { |
|
import rx._ |
|
object Post1 { |
|
def ex1()(implicit ctx: Ctx.Owner) = { |
|
val reactiveVar = Var(0) |
|
val a = Var(1) |
|
println (s"a vale ${a.now}") |
|
val b = Var(2) |
|
println (s"b vale ${b.now}") |
|
val resultado = Rx { a() + b() } |
|
|
|
assert(resultado.now == 3, "Algo ha ido mal con la reactividad") |
|
println(s"Lo guardamos en resultado, que es reactiva de a y b: ${resultado.now}") |
|
|
|
println("Cambiamos el valor de b=6") |
|
b()=6 |
|
|
|
println("Resultado ahora debería valer 7") |
|
assert(resultado.now == 7, "Algo ha ido mal con la reactividad") |
|
println(resultado.now) |
|
} |
|
} |
|
|
|
object Post2 { |
|
val reactiveVar = Var("Hello World") |
|
|
|
def ex1()(implicit ctx: Ctx.Owner) = { |
|
|
|
val o1 = reactiveVar.trigger { |
|
println("Llamada a trigger:") |
|
println(s"\treactiveVar.now = ${reactiveVar.now}") |
|
} |
|
|
|
val o2 = reactiveVar.foreach { newValue => |
|
println("Llamada a foreach:") |
|
println(s"\treactiveVar.now = [${reactiveVar.now}]") |
|
println(s"\tnewValue = [$newValue]") |
|
} |
|
|
|
} |
|
|
|
def ex2()(implicit ctx: Ctx.Owner) = { |
|
|
|
println("triggerLater no ejecuta en la inicialización de la variable. No deberías ver la llamada") |
|
val o1 = reactiveVar.triggerLater { |
|
println("Llamada a triggerLater:") |
|
println(s"\treactiveVar.now = ${reactiveVar.now}") |
|
} |
|
|
|
println("Pero foreach si que ejecuta") |
|
val o2 = reactiveVar.foreach { newValue => |
|
println("Llamada a foreach:") |
|
println(s"\treactiveVar.now = [${reactiveVar.now}]") |
|
println(s"\tnewValue = [$newValue]") |
|
} |
|
|
|
println("Pero ahora cambio el valor de reactiveVar, deberia ejecutar triggerLater y foreach") |
|
reactiveVar() = "Hello CRUEL world" |
|
} |
|
|
|
def ex3()(implicit ctx: Ctx.Owner) = { |
|
println("Asignamos un callback foreach sobre rectiveVar") |
|
val o1 = reactiveVar.foreach { newValue => |
|
println("Llamada a foreach:") |
|
println(s"\treactiveVar.now = [${reactiveVar.now}]") |
|
println(s"\tnewValue = [$newValue]") |
|
} |
|
|
|
println("Si ahora cambio el valor de reactiveVar, deberia ejecutar foreach") |
|
reactiveVar() = "Hello CRUEL world" |
|
|
|
println(""" |
|
|Ahora ya no quiero escuchar cambios en la variable, por lo que si cambio el valor de |
|
|reactiveVar, no se debe ejecutar ni foreach ni nada |
|
""".stripMargin) |
|
|
|
o1.kill |
|
|
|
reactiveVar() = "Hello Biutiful world" |
|
println(s"Ahora el valor e reactiveVar es... ${reactiveVar.now}") |
|
|
|
} |
|
} |
|
} |