See Original text in context
method migrate(Supply: --> Supply)
Takes a Supply
which itself has values that are of type Supply
as input. Each time the outer Supply
emits a new Supply
, this will be tapped and its values emitted. Any previously tapped Supply
will be closed. This is useful for migrating between different data sources, and only paying attention to the latest one.
For example, imagine an application where the user can switch between different stocks. When they switch to a new one, a connection is established to a web socket to get the latest values, and any previous connection should be closed. Each stream of values coming over the web socket would be represented as a Supply, which themselves are emitted into a Supply of latest data sources to watch. The migrate
method could be used to flatten this supply of supplies into a single Supply of the current values that the user cares about.
Here is a simple simulation of such a program:
my Supplier .= new;sub watch-stock().Supply.migrate.tap: *.say;watch-stock('GOOG');sleep 3;watch-stock('AAPL');sleep 3;
Which produces output like:
Starting to watch GOOGGOOG: 111.67GOOG: 111.20GOOG: 111.37Lost interest in GOOGStarting to watch AAPLAAPL: 111.55AAPL: 111.6AAPL: 111.6