Skip to content

Instantly share code, notes, and snippets.

@miguelsaddress
Created March 6, 2016 13:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save miguelsaddress/2370bc080bb4f210b4b9 to your computer and use it in GitHub Desktop.
Save miguelsaddress/2370bc080bb4f210b4b9 to your computer and use it in GitHub Desktop.
Este gist contiene las pruebas de Scala Rx de los post del blog : https://scalerablog.wordpress.com
name := "rx-scalera-blog"
version := "1.0"
scalaVersion := "2.11.7"
libraryDependencies += "com.lihaoyi" %% "scalarx" % "0.3.1"
***************************************
ScaleraBlog: Scala Rx Example, 1st Post
***************************************
a vale 1
b vale 2
Lo guardamos en resultado, que es reactiva de a y b: 3
Cambiamos el valor de b=6
Resultado ahora debería valer 7
7
**************************************************
ScaleraBlog: Scala Rx Example, 2nd Post. Example 1
**************************************************
Llamada a trigger:
reactiveVar.now = Hello World
Llamada a foreach:
reactiveVar.now = [Hello World]
newValue = [Hello World]
**************************************************
ScaleraBlog: Scala Rx Example, 2nd Post. Example 2
**************************************************
triggerLater no ejecuta en la inicialización de la variable. No deberías ver la llamada
Pero foreach si que ejecuta
Llamada a foreach:
reactiveVar.now = [Hello World]
newValue = [Hello World]
Pero ahora cambio el valor de reactiveVar, deberia ejecutar triggerLater y foreach
Llamada a foreach:
reactiveVar.now = [Hello CRUEL world]
newValue = [Hello CRUEL world]
Llamada a triggerLater:
reactiveVar.now = Hello CRUEL world
Llamada a foreach:
reactiveVar.now = [Hello CRUEL world]
newValue = [Hello CRUEL world]
Llamada a trigger:
reactiveVar.now = Hello CRUEL world
**************************************************
ScaleraBlog: Scala Rx Example, 2nd Post. Example 3
**************************************************
Asignamos un callback foreach sobre rectiveVar
Llamada a foreach:
reactiveVar.now = [Hello CRUEL world]
newValue = [Hello CRUEL world]
Si ahora cambio el valor de reactiveVar, deberia ejecutar foreach
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
Llamada a foreach:
reactiveVar.now = [Hello Biutiful world]
newValue = [Hello Biutiful world]
Llamada a triggerLater:
reactiveVar.now = Hello Biutiful world
Llamada a foreach:
reactiveVar.now = [Hello Biutiful world]
newValue = [Hello Biutiful world]
Llamada a trigger:
reactiveVar.now = Hello Biutiful world
Ahora el valor e reactiveVar es... Hello Biutiful world
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}")
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment