Kotlin传递函数作为参数与lambda实现
我正在使用io.reactivex.rxkotlin扩展函数:Kotlin传递函数作为参数与lambda实现,kotlin,kotlin-extension,rx-kotlin,Kotlin,Kotlin Extension,Rx Kotlin,我正在使用io.reactivex.rxkotlin扩展函数: fun <T : Any> Observable<T>.subscribeBy( onError: (Throwable) -> Unit = onErrorStub, onComplete: () -> Unit = onCompleteStub, onNext: (T) -> Unit = onNextStub ): Dis
fun <T : Any> Observable<T>.subscribeBy(
onError: (Throwable) -> Unit = onErrorStub,
onComplete: () -> Unit = onCompleteStub,
onNext: (T) -> Unit = onNextStub
): Disposable
第二次执行:
myObservable.subscribeBy { str -> }
myObservable.subscribeBy({ throwable -> })
在第一个实现中,函数是onNext
在第二个实现中,函数是onError
我不知道为什么。subscribeBy方法具有命名参数的优点,可以解决所有问题
您可以观察到,使用lambda表示法设置最后一个未命名参数,而设置参数直接设置第一个未命名参数
如果命名其中一个参数,将无法再使用lambda表示法。来自:
在Kotlin中,有一种约定,即如果函数的最后一个参数接受函数,则可以将作为相应参数传递的lambda表达式放在括号外:
因此,在您的例子中,您有一个接受三个可选参数的函数。在第一次实施中:
myObservable.subscribeBy { str -> }
myObservable.subscribeBy({ throwable -> })
您正在使用此功能忽略最后一个lambda参数onNext的括号。但是,当您使用第二个实现时:
myObservable.subscribeBy { str -> }
myObservable.subscribeBy({ throwable -> })
由于它位于括号内,因此必须是第一个参数,除非您明确将其命名为最后一个参数,例如:
myObservable.subscribeBy(onNext = { str -> })
我以前使用过subscribeBy,但我不知道这个扩展函数与subscribe本身相比有什么好处?!