如何检查kotlin中的lambda空虚

Sun*_*ike 4 lambda android function kotlin

如何检查Kotlin中lambda是否为空?例如,我有签名之类的

onError:(Throwable) -> Unit = {}
Run Code Online (Sandbox Code Playgroud)

我怎么能有不同的是它的默认值来自正文或应用于此功能的值?

gue*_*ter 11

您无法测试lambda的主体是否为空(因此它不包含源代码),但您可以通过为该值创建常量并将其用作默认值来检查lambda是否为默认值.您还可以检查该值是否为默认值:

fun main(args: Array<String>) {
    foo()
    foo { }
    foo { println("Bar") }
}

private val EMPTY: (Throwable) -> Unit = {}
fun foo(onError: (Throwable) -> Unit = EMPTY) {
    if (onError === EMPTY) {
       // the default value is used
    } else {
       // a lambda was defined - no default value used
    }
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*nze 5

只是不要使用空 lambda 作为默认值。

由于在 kotlin 中,可空性是一等公民,并且明确指示缺失值,因此我将传递 null 作为默认参数。

onError: ((Throwable) -> Unit)? = null
Run Code Online (Sandbox Code Playgroud)

签名看起来有点难看,但我认为这是值得的。

例如,它可以很容易地检查和处理,并且您不会期望 lambda 做一些有用的事情 - 特别是对于具有返回值的 lambda。

我在这里给出了相同的评论:https ://stackoverflow.com/a/38793639/3917943