Kotlin .let {} нулевая безопасность - PullRequest
1 голос
/ 10 июля 2019

При использовании функции .let {} я заметил, что при выполнении следующих действий:

bucket?.assignedVariantName.let { 
    bucket?.determineVariant() <-- guarantee safety for bucket 
}

Вы должны гарантировать безопасность для ведра в этом случае, т.е. ведра ?.или ведро!пока ноль безопасности

Ответы [ 3 ]

3 голосов
/ 10 июля 2019

Поскольку bucket обнуляем, вам не нужно звонить let на assignedVariantName, сделайте это так

bucket?.let { 
    it.determineVariant()
}
2 голосов
/ 10 июля 2019

Стандартная функция let () предоставляет block в качестве выражения лямбда-метода для callback при вызове.Таким образом, переменная, по которой она вызывается, передается как аргумент block .

Так что, если вы используете ее в безопасный оператор вызова , она предоставляет вам ненулевая переменная как it в обратном вызове.Вы также можете переименовать его как хотите ниже:

bucket?.assignedVariantName?.let { 
    it.determineVariant() //<-- You can directly use it here
}

или переименовать это как угодно:

bucket?.assignedVariantName?.let { name ->
    name.determineVariant() //<-- Renaming `it` to `name`
}
2 голосов
/ 10 июля 2019

Kotlin .let{} метод обеспечивает нулевую безопасность

bucket?.assignedVariantName?.let { 
    // use `it` as non-null variable
    it.determineVariant()
}

Вам необходимо использовать it внутри блока let, чтобы использовать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...