Kotlin传递函数作为参数与lambda实现

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

我正在使用io.reactivex.rxkotlin扩展函数:

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本身相比有什么好处?!