public void Square() { var input = Reactive.Variable(1); var inputSquared = Reactive.Expression(() => input * input); inputSquared.Subscribe(getSquare => Console.WriteLine("square = " + getSquare())); // Prints 'square = 1' input.Value = 2; //Prints 'square = 4' input.Value = 3; //Prints 'square = 9' }
public void Composition() { var input = Reactive.Variable(1); var timesTwo = Reactive.Expression(() => input * 2); var timesThree = Reactive.Expression(() => input * 3); var sumOfBoth = Reactive.Expression(() => timesTwo.Evaluate() + timesThree.Evaluate()); sumOfBoth.Subscribe(getValue => Console.WriteLine("sumOfBoth = " + getValue())); //Prints 'sumOfBoth = 5' input.Value = 2; //Prints 'sumOfBoth = 10' input.Value = 3; //Prints 'sumOfBoth = 15' }
public void Precise() { var left = Reactive.Variable(false); var right = Reactive.Variable(false); var leftOrRight = Reactive.Expression(() => left || right); leftOrRight.Subscribe(getValue => Console.WriteLine("leftOrRight = " + getValue())); //Prints 'leftOrRight = False' right.Value = true; //Prints 'leftOrRight = True' left.Value = true; //Prints 'leftOrRight = True' right.Value = false; //Prints nothing }
public void Cache() { var input = Reactive.Variable(2); //We define a reactive variable. Func <int> f = () => //f is the calculation we want to cache. { Console.WriteLine("cache miss"); return(input * input); //f depends on our reactive variable 'input'. }; var cache = Reactive.Cache(f); //We base our cache on f. Assert.AreEqual(4, cache.Get()); //Prints 'cache miss' Assert.AreEqual(4, cache.Get()); //Cache hit. input.Value = 3; //Cache becomes stale. Assert.AreEqual(9, cache.Get()); //Prints 'cache miss' Assert.AreEqual(9, cache.Get()); //Cache hit. }