Котлин, где возвращение изнутри отпустить - PullRequest
0 голосов
/ 19 июня 2019
@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 Ответ

2 голосов
/ 19 июня 2019

Правило в Котлине состоит в том, что равнина return возвращается из ближайшего fun.

См. Документы здесь .

Если есть вмещающая лямбда, то это возможно только в том случае, если лямбда является встроенной (т.е. передается функции, помеченной ключевым словом inline);в противном случае компилятор будет жаловаться.

Вы можете изменить это, если необходимо, указав возвращаемое значение с меткой (например, return@myLabel) или именем функции (например, return@let).Но если он не квалифицирован, вам просто нужно найти ближайшую включающую функцию, определенную с помощью fun.

...