【发布时间】:2020-11-02 20:23:04
【问题描述】:
我正在尝试创建内联的 try-catch 辅助函数,但由于内联 lambda 中出现 return 语句而遇到编译错误。下面是一些演示相同问题的代码
fun isStringEmpty(myString: String): Boolean {
stringOpHelper {
return myString.length == 0
}
}
inline fun <T> stringOpHelper(fn: () -> T) {
println("performing string operation")
fn()
}
如果在内联函数调用之后添加返回值或抛出异常,这将编译为所需的效果,但该代码应该无法访问。例如:
fun isStringEmpty(myString: String): Boolean {
stringOpHelper {
return myString.length == 0
}
TODO("this is actually unreachable")
}
inline fun <T> stringOpHelper(fn: () -> T) {
println("performing string operation")
fn()
}
我的期望是编译器会看到stringOpHelper 总是调用fn() 并且isStringEmpty 中的fn 总是返回,所以内联的stringOpHelper 调用总是返回。
是否可以以一种避免调用函数中无法访问的异常/返回的方式定义内联辅助函数?否则,这是不可能的原因是什么?
【问题讨论】: