2017-04-17 32 views

回答

3

我認爲一個很好的例子是combineLatest運算符作爲靜態和實例方法存在。源Observables到combineLatest的順序無關緊要。它的內部工作方式與輸出相同(只是結果數組中的值的順序將會不同,這是不相關的)。這同樣適用於concatmergezip,forkJoin等等。

但是,與withLatestFrom算子不同的是,Observables的順序很重要。有一個源Observable控制操作員何時發出。如果您更改了訂單,它會產生不同的結果。例如,如果你有以下:

Observable.withLatestFrom(o1, o2, o3) 

這意味着你也可以使用以下命令:

Observable.withLatestFrom(...observables) 

現在,你可以不知道哪些可觀察是源,它的將是難以調試這是怎麼回事。

所以沒有Observable.withLatestFrom靜態方法的原因是因爲它沒有太大意義。 Observables的順序很重要,它會讓事情變得更加混亂。

由於同樣的原因,其他運營商(如bufferwindow)沒有靜態形式,即使沒有技術限制。它只會讓你編寫更多命令式的代碼,而不是簡單地鏈接操作符。

2

withLatestFrommerge不同,因爲它有一個規範的「源」可觀察的概念,它由另一個可觀察值的最新值增強。 merge不是像這樣的「分層」,可觀測量只是等於一個單一的流。

相關問題