Это на самом деле не столько связано с областями видимости, но и с нулевой безопасностью.
В случае obj
(object
не является хорошим именем, так как это ключевое слово в Kotlin)значение, этот код будет выдавать ненужное умное приведение:
val obj: String? = null
obj?.let {
doSomethingWith(obj) // Smart cast to kotlin.String
}
В случае, если obj
является переменной, это становится еще хуже, как было правильно указано в комментариях, так как этот код не может быть потоком-безопаснее.
Это безопасно, хотя:
obj?.let {
doSomethingWith(it)
}
Поскольку it
является значением, следовательно, неизменным.