科特林没有返回值的函数的空返回

时间:2018-09-21 03:51:21

标签: android android-studio kotlin

我具有以下功能。

    private val onConnect = Emitter.Listener {
    if(fromReconnect) {
        return
    }
    Log.d("Socket", "Socket Connected")
    val hndlr = Handler(Looper.getMainLooper())
    hndlr.post{ Toast.makeText(applicationContext, "Socket Connected", Toast.LENGTH_SHORT).show() }
    if (isTryLogin){
        reLogin()
    }
}

如果设置了 fromReconnect 标志,我试图从该函数返回。但是Android Studio抛出此处不允许返回错误。但是,当我将 return 更改为 return @ Listener 时,它可以正常工作。IDE提示它是一个匿名函数。为什么我们需要 return @ Listener 而不是仅仅 return

1 个答案:

答案 0 :(得分:0)

Kotlin仅允许在内联函数内部进行非本地返回。 如果您的函数未标记为内联,或者lambda参数标记为 noinline crossinline ,则您不能使用return语句,而仅使用标签返回。由于存在非本地返回-从调用方函数返回,而不是从lambda返回。

您可以在文档中找到其他信息。 https://kotlinlang.org/docs/reference/returns.html