FRP:如何乘以一个流中的事件数
FRP: How to multiply the number of events in one stream
问题很简单,但我想不出好的解决方案。
假设我有一个流。该流只能发送 4 个事件:A、B、C、D
可以表示为:
[--A--A----C---B--D--...]
现在考虑一下,每个事件都有其编码值。
例如:
A -> 1, 0, 0, 0
B -> 0, 1, 0, 0
...
现在的问题是:如何使用 A、B、C、D 事件的编码值转换此流,使每个事件都表示为 4 个事件。
为了让一切都清楚,这就是我想要的:
我的流:
[--A--A----C---B--D--...]
我知道:
A -> 1, 0, 0, 0
B -> 0, 1, 0, 0
...
我要制作的直播:
[--1-0-0-0--1-0-0-0----0-0-1-0---0-1-0-0--0-0-0-1--...]
我能想出的一个解决方案是映射流,为每个事件返回子流,然后将结果展平。但是我不确定它应该如何根据 FRP 来实现。
如果我应该使用流组合,请提供相关示例。
我个人使用Reactive-Cocoa,但你可以用任何其他语言回答,没关系。
我找到了适合我的解决方案。我对扁平流的猜测是非常合理的。所以这就是我如何实现预期结果的:
// first producer is SignalProducer<String, NoError>
// which posts events "A", "B", "C", "D"
let secondProducer = firstProducer.flatMap(.Latest, transform: { value -> SignalProducer<Bool, NoError> in
let result:[Bool] = ["A" == value, "B" == value, "C" == value, "D" == value]
return SignalProducer<Bool, NoError>(values: result)
})
secondProducer.startWithNext({value in
print("value : \(value)")
})
这里的要点是:我用flatMap把第一个signal producer转换成第二个,把A,B,C,D分别编码成4个Bool的signal。
是Frp的基础知识,希望对初学者有所帮助
问题很简单,但我想不出好的解决方案。
假设我有一个流。该流只能发送 4 个事件:A、B、C、D
可以表示为:
[--A--A----C---B--D--...]
现在考虑一下,每个事件都有其编码值。 例如:
A -> 1, 0, 0, 0
B -> 0, 1, 0, 0
...
现在的问题是:如何使用 A、B、C、D 事件的编码值转换此流,使每个事件都表示为 4 个事件。
为了让一切都清楚,这就是我想要的:
我的流:
[--A--A----C---B--D--...]
我知道:
A -> 1, 0, 0, 0
B -> 0, 1, 0, 0
...
我要制作的直播:
[--1-0-0-0--1-0-0-0----0-0-1-0---0-1-0-0--0-0-0-1--...]
我能想出的一个解决方案是映射流,为每个事件返回子流,然后将结果展平。但是我不确定它应该如何根据 FRP 来实现。
如果我应该使用流组合,请提供相关示例。 我个人使用Reactive-Cocoa,但你可以用任何其他语言回答,没关系。
我找到了适合我的解决方案。我对扁平流的猜测是非常合理的。所以这就是我如何实现预期结果的:
// first producer is SignalProducer<String, NoError>
// which posts events "A", "B", "C", "D"
let secondProducer = firstProducer.flatMap(.Latest, transform: { value -> SignalProducer<Bool, NoError> in
let result:[Bool] = ["A" == value, "B" == value, "C" == value, "D" == value]
return SignalProducer<Bool, NoError>(values: result)
})
secondProducer.startWithNext({value in
print("value : \(value)")
})
这里的要点是:我用flatMap把第一个signal producer转换成第二个,把A,B,C,D分别编码成4个Bool的signal。
是Frp的基础知识,希望对初学者有所帮助