Rx java 通过适当的处理扩展Kotlin中的RxJava可观测性

Rx java 通过适当的处理扩展Kotlin中的RxJava可观测性,rx-java,kotlin,Rx Java,Kotlin,我正在尝试为RxJava创建一个新的操作符,它的工作方式类似于scan,但可以采用两种不同的类型。这类似于fold或reduce的传统实现,其中如果给定默认值,折叠函数的参数可以是不同的类型,只要返回类型与累加器匹配 这是我到目前为止得到的 fun <T, R> Observable<T>.fold(acc: R, f: (R, T) -> R): Observable<R> = Observable.create { o -> var a

我正在尝试为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()
    })
}
fun Observable.fold(acc:R,f:(R,T)->R:Observable=Observable.create{o->
var accm=acc
订阅({
accm=f(accm,it)
o、 onNext(accm)
}, {
o、 onError(it)
}, {
o、 onComplete()
})
}

我只是在一个可观察的
中订阅
这个
。创建
块,并用通过累加器函数输入的新值更新观察者。问题是当处置
时,订阅将不会被清除。我该怎么办?

请看
扫描(R,双功能)
:嗯,我想我试过这个,但没用。也许我的编译器只是在抱怨别的事情。无论如何,我试图实现的特定功能并不是问题的焦点,它只是一个例子。我仍然想知道我如何做一个类似的扩展,只是为了更好地理解可观察物是如何工作的。谢谢你!有一个关于编写操作符的例子。太棒了,谢谢@你好!。考虑为你的博客写新文章?