Sets the value of this Var
.
Sets the value of this Var
. Triggers recalculation of depending Rx
s.
Returns a new Rx
with updates where f
is defined and mapped by f
.
Returns a new Rx
with updates where f
is defined and mapped by f
.
If the first update is dropped, the default value is used instead.
Returns a new Rx
without updates fulfilling a predicate.
Returns a new Rx
without updates fulfilling a predicate.
If the first update is dropped, the default value is used instead.
val numbers: Rx[Int]
val even: Rx[Int] = numbers.dropIf(_ % 2 == 0)(-1)
// numbers => 0 0 3 4 5 6 ...
// even => -1 3 5 ...
Drop repeated value of this Rx
.
Drop repeated value of this Rx
.
val numbers: Rx[Int]
val noDups: Rx[Int] = numbers.dropRepeats
// numbers => 0 0 3 3 5 5 5 4 ...
// noDups => 0 3 5 4 ...
Note: This could also be implemented in terms of keepIf, map, and foldp.
Dynamically switch between different Rx
s according to the given
function, applied on each element of this Rx
.
Dynamically switch between different Rx
s according to the given
function, applied on each element of this Rx
. Each switch will cancel
the subscriptions for the previous outgoing Rx
and start a new
subscription on the next Rx
.
Together with Rx#map
and Rx.apply
, flatMap forms a Monad
. [Proof](https://github.com/OlivierBlanvillain/monadic-html/blob/master/monadic-rx-cats/src/main/scala/mhtml/cats.scala).
Produces a Rx
containing cumulative results of applying a binary
operator to each element of this Rx
, starting from a seed
and the
current value of the upstream Rx
, and moving forward in time; no internal
state is maintained.
Produces a Rx
containing cumulative results of applying a binary
operator to each element of this Rx
, starting from a seed
and the
current value of the upstream Rx
, and moving forward in time; no internal
state is maintained.
val numbers: Rx[Int]
val folded: Rx[Int] = numbers.foldp(0)(_ + _)
// numbers => 1 2 1 1 3 ...
// folded => 1 3 4 5 8 ...
Updates this Var
with values emitted by the other
Rx
.
Updates this Var
with values emitted by the other
Rx
. This method
is side effect free. Consequently, the returned Rx
must be used at
least once for the imitation to take place. This Var
the other
Rx
and the returned Rx
will all emit the same values.
This method exists (only) to allow *circular dependency* in Rx
graphs.
Is there anything currently subscribed to this Var
?
Is there anything currently subscribed to this Var
?
This method is intended to be used to test the absence of memory leak.
For instance, all Var
s should be cold after canceling a mount
.
Returns a new Rx
with updates fulfilling a predicate.
Returns a new Rx
with updates fulfilling a predicate.
If the first update is dropped, the default value is used instead.
val numbers: Rx[Int]
val even: Rx[Int] = numbers.keepIf(_ % 2 == 0)(-1)
// numbers => 0 0 3 4 5 6 ...
// even => 0 0 4 6 ...
Apply a function to each element of this Rx
.
Apply a function to each element of this Rx
.
val numbers: Rx[Int]
val doubles: Rx[Int] = numbers.map(2.*)
// numbers => 0 1 4 3 2 ...
// doubles => 0 2 8 6 4 ...
Merge two Rx
into one.
Merge two Rx
into one. Updates coming from either of the incoming Rx
trigger updates in the outgoing Rx
. Upon creation, the outgoing Rx
first receives the current value from this Rx
, then from the other Rx
.
val r1: Rx[Int]
val r2: Rx[Int]
val merged: Rx[Int] = r1.merge(r2)
// r1 => 0 8 3 ...
// r2 => 1 4 3 ...
// merged => 0 8 4 3 3 ...
With this operation, Rx
forms a Semigroup
. [Proof](https://github.com/OlivierBlanvillain/monadic-html/blob/master/monadic-rx-cats/src/main/scala/mhtml/cats.scala).
|+|
syntax is available via the monadic-rx-cats
package.
Sample this Rx
using another Rx
: every time an event occurs on
the second Rx
the output updates with the latest value of this Rx
.
Sample this Rx
using another Rx
: every time an event occurs on
the second Rx
the output updates with the latest value of this Rx
.
val r1: Rx[Char]
val r2: Rx[Int]
val sp: Rx[Int] = r2.sampleOn(r1)
// r1 => u u u u ...
// r2 => 1 2 3 4 ...
// sp => 1 3 3 4 ...
Updates the value of this Var
.
Updates the value of this Var
. Triggers recalculation of depending Rx
s.
Create the Cartesian product of two Rx
.
Create the Cartesian product of two Rx
. The output tuple contains the
latest values from each input Rx
, which updates whenever the value from
either input Rx
update. This method is faster than combining Rx
s using
for { a <- ra; b <- rb } yield (a, b)
.
// r1 => 0 8 9 ...
// r2 => 1 4 5 6 ...
// zip => (0,1) (8,1) (8,4) (8,5) (8,6) (9,6) ...
This method, together with Rx.apply
, forms am Applicative
.
|@|
syntax is available via the monadic-rx-cats
package.
A smart variable that can be set manually.