Kotlin: Whats does “return@” mean?
我在我的一个项目中使用RxJava,我使用Android Studio插件将我的一个类转换为Kotlin,并且在映射
我不知道这是什么意思。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | something.flatMap(Func1<ArticleCriteria, Observable<Pair<String, String>>> { val isTemporaryClone = it.isATemporaryClone val isTheOriginalToken = it.tokenIsOriginalHere if (isTemporaryClone) { if (!isTheOriginalToken) { return@Func1 paramsError("Token is always original for temp articles") } return@Func1 mJobRunner.doNotRun(DeleteArticleJob.TAG) .doOnNext(deletePersonalActionById(articleId)) } runArticleJobAsync(DeleteArticleJob.TAG, it) }) |
在Kotlin中,
它与函数文字(lambda)和局部函数一起使用。未标记的
1 2 3 4 5 6 | fun foo(ints: List<Int>) { ints.forEach { if (it == 0) return print(it) } } |
在这里,
但是,如果要从其他任何函数(lambda或外部
1 2 3 4 5 6 | fun foo(ints: List<Int>) { ints.forEach { if (it == 0) return@forEach // implicit label for lambda passed to forEach print(it) } } |
1 2 3 4 5 6 7 8 9 10 11 | fun foo(ints: List<Int>): List<String> { val result = ints.map f@{ if (it == 0) return@f"zero" // return at named label if (it == -1) return emptyList() // return at foo "number $it" // expression returned from lambda } return result } foo(listOf(1, -1, 1)) // [] foo(listOf(1, 0, 1)) // ["number 1","zero","number 1"] |
Lambda的非本地返回(即从外部函数返回)仅支持本地和内联函数,因为如果未内联Lambda(或将函数放置在对象内部),则不能保证仅在内部调用封闭函数(例如,可以将其存储在变量中,然后再调用),在这种情况下,非本地返回将毫无意义。
合格的
在Kotlin中,您可以从嵌套闭包调用return来完成外部闭包。在Java中是不可能的。
通常,您可以省略
在您的示例中,您不能忽略它,因为