kotlin:我可以使用闭包中的合格 return 吗?
kotlin: can I use qualified return from a closure?
我想记录&return来自供应商的空值。
不记录这个工作正常:
fun check_plain(supplier: Supplier<String?>) {
val arg: String = supplier.get() ?: return
// do checking
}
但是如果我也登录 elvis,我会得到一个错误:
fun check_log(supplier: Supplier<String?>) {
val arg: String = supplier.get() ?: {
logger.info { "Nothing interesting here" }
return@check_log // 'return' is not allowed here
}
// do checking
}
我解决了它,但它不等价,我放弃了正式的不可空性:
fun check_if(supplier: Supplier<String?>) {
val arg: String? = supplier.get().also {
if (it == null) {
logger.info { "Nothing interesting here" }
return@check_if
}
}
// do checking
}
我能以某种方式保留猫王吗?
return
在那里是不允许的,因为 lambda 没有内联。有关详细信息,请参阅 the language spec。
对于这个简单的案例,你可以这样做:
val arg: String = supplier.get() ?: return logger.info { "Nothing interesting here" }
如果您有更多的语句想要 运行,请使用 run
:
val arg: String = supplier.get() ?: return run {
logger.info { ... }
logger.info { ... }
logger.info { ... }
}
或:
val arg: String = supplier.get() ?: run {
logger.info { ... }
logger.info { ... }
logger.info { ... }
return
}
请注意 return
允许在 run
中使用 因为 run
是内联的。