回到java中我以前只为{void}方法编写return
...但kotlin似乎不允许返回,而是使用return@methodname
?
有人可以解释这是什么以及它如何增加价值?
bAddLine.setOnClickListener {
val selectedSeries = getSelectedSeries()
if (selectedSeries.isEmpty()) {
Toast.makeText(this, getString(R.string.toast_channel_mandatory), Toast.LENGTH_LONG).show()
return@setOnClickListener
}
}
答案 0 :(得分:7)
来自kotlinlang网站:
以标签返回
使用函数文字,局部函数和对象表达式,函数可以嵌套在Kotlin中。合格的回报允许我们从外部函数返回。最重要的用例是从lambda表达式返回。回想一下,当我们写这篇文章时:
fun foo() {
ints.forEach {
if (it == 0) return // nonlocal return from inside lambda directly to the caller of foo()
print(it)
}
}
return
- 表达式从最近的封闭函数返回,即foo。 (请注意,仅对传递给内联函数的lambda表达式支持此类非本地返回。)如果我们需要从lambda表达式返回,我们必须对其进行标注并限定return
:
fun foo() {
ints.forEach lit@ {
if (it == 0) return@lit
print(it)
}
}
现在,它仅从lambda表达式返回。通常使用implicits标签会更方便:这样的标签与lambda传递的函数同名。
fun foo() {
ints.forEach {
if (it == 0) return@forEach
print(it)
}
}
答案 1 :(得分:2)
当在lambda中时,你必须指定你想要return
的范围,因为它可能是不明确的。查看有关returning at labels的官方文档。
在这种特定情况下,如果您在一个不返回任何内容的函数的末尾返回,则可以完全省略return
语句。