我尝试为RxJava创建一个与scan
类似的新运算符,但可以采用两种不同的类型。这类似于fold
或reduce
的传统实现,其中如果给出默认值,则只要返回类型与累加器匹配,折叠函数的参数可以是不同类型。
这是我到目前为止所做的事情。
fun <T, R> Observable<T>.fold(acc: R, f: (R, T) -> R): Observable<R> = Observable.create { o ->
var accm = acc
subscribe({
accm = f(accm, it)
o.onNext(accm)
}, {
o.onError(it)
}, {
o.onComplete()
})
}
我只是在this
块中订阅Observable.create
,并使用通过累加器函数输入的新值更新观察者。问题是,当this
被处置时,订阅不会被清除。我该怎么办?