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

What is the best way to break execution / return to caller of anonymous functions (Kotlin)?

我想使用 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 到 return 到。

有没有更好的方法来return函数调用者/中断执行?

提前致谢!

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

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

你可以简单地标记匿名函数的整个块。 这样你就不需要我以前用过的run-block。

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

你的代码可以更简单地写成:

suspend fun messageCreateEvent(event: MessageCreateEvent) = with(event) {
    val submissionID = URLReviewer.getSubmissionID(message.content) ?: return
    // some code
}

如果您需要将它作为参数传递给某些东西,您可以使用 :: 获得对任何函数的引用。

仅供参考,您还可以从内联 lambda return 命名传递给它的函数:

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