为什么不允许它continue
起let
功能?
此代码:
fun foo(elements: List<String?>) {
for (element in elements) {
element?.let {
continue // error: 'break' or 'continue' jumps across a function or a class boundary
}
}
}
甚至这段代码:
fun foo(elements: List<String?>) {
loop@ for (element in elements) {
element?.let {
continue@loop // error: 'break' or 'continue' jumps across a function or a class boundary
}
}
}
没有编译错误:
“ break”或“ continue”跨越函数或类边界
我知道在这种特殊情况下,我可以使用filterNotNull
或手动检查智能投射,但是我的问题是为什么不允许在continue
这里使用它?
请在此处为该功能投票:https : //youtrack.jetbrains.com/issue/KT-1436
这些将称为“非本地”中断并继续。根据文档:
break
而continue
不是内联lambda表达式尚未公布,但我们正计划支持他们。
return
仅当lambda是内联lambda时才支持在lambda中使用裸(例如非本地)(因为否则,它不知道从其调用的上下文)。因此break
,continue
应该能够得到支持。我不知道该功能被延迟的原因。
请注意,run
在循环内部或外部都存在针对它们的替代方法,并且利用了以下事实:内联函数至少支持非本地返回。
fun foo(elements: List<String?>) {
run {
for (element in elements) {
element?.let {
println("Non-null value found in list.")
return@run // breaks the loop
}
}
}
println("Finished checking list")
}
fun bar(elements: List<String?>) {
for (element in elements) {
run {
element?.let {
return@run // continues the loop
}
println("Element is a null value.")
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句