中断匿名函数(Kotlin)的执行/返回调用方的最佳方法是什么?

中断匿名函数(Kotlin)的执行/返回调用方的最佳方法是什么?,kotlin,anonymous-function,higher-order-functions,Kotlin,Anonymous Function,Higher Order Functions,我想使用return语句来中断函数的执行,如: fun divide(i1: Int, i2: Int) { if (i2 == 0) return print(i1 / i2) } 我正在使用的函数如下所示: val messageCreateEvent: suspend MessageCreateEvent.() -> Unit = { run work@ { val submissionID = URLReviewer.get

我想使用
return
语句来中断函数的执行,如:

fun divide(i1: Int, i2: Int) {
    if (i2 == 0) return
    print(i1 / i2)
}
我正在使用的函数如下所示:

val messageCreateEvent: suspend MessageCreateEvent.() -> Unit = {
        run work@ {
            val submissionID = URLReviewer.getSubmissionID(message.content) ?: return@work
            // some code
        }
}
(我知道,只有if语句才能实现相同的功能。)

目前,我正在指定要返回的标签
@work

是否有更好的方法返回函数调用方/中断执行


提前谢谢

不是一个完美的解决方案,但找到了我问题的答案:

val messageCreateEvent: suspend MessageCreateEvent.() -> Unit = work@ {
        val submissionID = URLReviewer.getSubmissionID(message.content) ?: return@work
        // some code
}
您可以简单地标记匿名函数的整个块。 这样你就不需要像我以前使用的那样使用跑步挡块了


这个解决方案虽然不完美,但可以满足我的需要。

您的代码可以更简单地编写:

suspend fun messageCreateEvent(event: MessageCreateEvent) = with(event) {
    val submissionID = URLReviewer.getSubmissionID(message.content) ?: return
    // some code
}
如果需要将任何函数作为参数传递给某个对象,可以使用
获取该函数的引用

仅供参考,您还可以通过命名传递给的函数从内联lambda返回:

val messageCreateEvent: suspend MessageCreateEvent.() -> Unit = {
        run {
            val submissionID = URLReviewer.getSubmissionID(message.content) ?: return@run
            // some code
        }
}

理论上,您也可以简单地使
messageCreateEvent
成为一个真正的函数。然后将其作为
高阶(::messageCreateEvent)
而不是
高阶(messageCreateEvent)
传递。太好了,非常感谢!我从来没有将
函数一起使用过,仔细阅读一下,它似乎是解决我问题的完美方法
inline fun with(receiver:T,block:T.()->R):R
-
调用指定的函数块,将给定的接收器作为其接收器,并返回其结果。