Почему? .Let возвращает значение NULL, даже если оно не равно NULL - PullRequest
0 голосов
/ 17 сентября 2018

Стандартная функция Котлина let определяется следующим образом:

public inline fun <T, R> T.let(block: (T) -> R): R

Не означает ли это, что возвращаемый тип let будет таким, какой возвращает блок?

Почему это не работает?

var a: String? = "maybe null" 
val x: Boolean = a?.let { 
    a.contains("maybe") // note that contains returns Boolean, not Boolean?
}

Это жалуется: Несоответствие типов: Обязательно Boolean, Найдено Boolean? Не должно ли оно вернуть Boolean, поскольку функция contains возвращает Boolean?

Я уверен, что что-то неправильно понял. Может быть, кто-то может помочь мне и другим новичкам лучше понять.

1 Ответ

0 голосов
/ 17 сентября 2018

a?.let возвращает все, что вы делаете внутри данного блока let, НО, поскольку a может быть null, вы не уверены, был ли вообще вызван блок let. Вот почему x должно быть либо Boolean?, либо вам нужно указать, что следует возвращать, если a равно null, например ::10000 *

val x: Boolean = a?.let { a.contains("maybe") }
                  ?: false // this is used if `a` is null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...