我具有以下功能。
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 ?
答案 0 :(得分:0)
Kotlin仅允许在内联函数内部进行非本地返回。 如果您的函数未标记为内联,或者lambda参数标记为 noinline 或 crossinline ,则您不能使用return语句,而仅使用标签返回。由于存在非本地返回-从调用方函数返回,而不是从lambda返回。
您可以在文档中找到其他信息。 https://kotlinlang.org/docs/reference/returns.html