中断执行/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
}
}
我想使用 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
}
}