В следующем коде:производительность слияния в функциональной Реактивная программирования (RX)
http://jsfiddle.net/staltz/4gGgs/27/
var clickStream = Rx.Observable.fromEvent(button, 'click');
var multiClickStream = clickStream
.buffer(function() { return clickStream.throttle(250); })
.map(function(list) { return list.length; })
.filter(function(x) { return x > 1; });
// Same as above, but detects single clicks
var singleClickStream = clickStream
.buffer(function() { return clickStream.throttle(250); })
.map(function(list) { return list.length; })
.filter(function(x) { return x === 1; });
// Listen to both streams and render the text label accordingly
singleClickStream.subscribe(function (event) {
document.querySelector('h2').textContent = 'click';
});
multiClickStream.subscribe(function (numclicks) {
document.querySelector('h2').textContent = ''+numclicks+'x click';
});
Rx.Observable.merge(singleClickStream, multiClickStream)
.throttle(1000)
.subscribe(function (suggestion) {
document.querySelector('h2').textContent = '';
});
Сколько раз Clickstream последовательность будет повторяться после merge
? Я имею в виду, это будет выглядеть следующим образом:
корпус 1
for(numclicks : clickStream.length){
if (numclicks === 1){
document.querySelector('h2').textContent = 'click';
}
};
for(numclicks : clickStream.length){
if (numclicks > 1){
document.querySelector('h2').textContent = ''+numclicks+'x click';
}
};
Или это будет внутри, на самом деле объединены в нечто вроде этого (псевдокод):
случае 2
for(numclicks: clickStream.length){
if (numclicks === 1){
document.querySelector('h2').textContent = 'click';
}else if(numclicks > 1){
document.querySelector('h2').textContent = ''+numclicks+'x click';
}
}
Я лично считаю, что слияние просто последовательно применяется поток к его аргументам (случай 1).
P.S. Я надеюсь, что есть такие стандарты для таких вещей. Но если нет - я особенно заинтересован в реализации RxCpp и Sodium. Я взял пример js, как более интерактивный.
1) «В rxcpp отсутствует перегрузка буфера, которая позволяет наблюдаемому инициировать переход к новому буферу» - что это значит? 2) Возможно ли изменить LINQ, поэтому 'if's' 'ifelse' '' 'switch'? :) – tower120
Оператор буфера, используемый в jsfiddle, выполняет функцию, возвращающую наблюдаемую. rxcpp еще не поддерживает эту форму буфера. –
Я считаю, что если/else невозможно, учитывая, что каждый блок является отдельной функцией. –