科特林,从内部释放的回报

时间:2019-06-19 15:40:25

标签: kotlin let

@kotlin.internal.InlineOnly
public inline fun <T, R> T.let(block: (T) -> R): R {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    return block(this)
}

并具有以下功能:

fun getType() : String? {

     val type = mContent.let {
         if (!TextUtils.isEmpty(it) && it == "TYPE_1") {
             return "TYPE_A" . //where it returns to, as the result of the let{},  or as return value to exit the fun getType()?
         }
         else {
            return it
         }
     }

     if (type == "TYPE_A") {
        return getType_A() 
     } 

     return type
}

放行{}中的块内返回,退出fun getType()还是仅从let{}返回?

1 个答案:

答案 0 :(得分:2)

科特林的规则是平原return从最近的fun 返回。

请参阅文档here

如果有一个封闭的lambda,则只有在lambda是内联的(即传递给标有inline关键字的函数)时才有可能;否则编译器会抱怨。

您可以根据需要更改此值,方法是使用一个封闭的标签(例如return@myLabel)或函数名称(例如return@let)来限定返回值。但是,如果不合格,则只需查找用fun定义的最近的封闭函数。