неявный параметр вмещающей лямбды затенен - PullRequest
1 голос
/ 17 апреля 2019
val listPlans: List<Plan> = newPlans.mapTry {
            it.data.map {
                Plan(it.id, it.name, it.phone, it.desc, it.email)
            }.toList()
        }

Начинающий код Kotlin и IntelliJ выделяют его в Plan(it.id, it.name, it.phone, it.desc, it.email) и говорят, что неявный параметр включения лямбды затенен.

Можно ли оставить все как есть? Если нет, чем я могу заменить его?

1 Ответ

5 голосов
/ 17 апреля 2019

У вас есть вложенные лямбды, поэтому «оно» будет представлять неявный параметр самой внутренней лямбды. Это предупреждение в основном для удобства чтения и предотвращения путаницы, потому что значение «оно» становится более неясным, когда вы вкладываете больше лямбд. Я рекомендую вам явно указывать лямбда-параметры для вложенных лямбд:

val listPlans: List<Plan> = newPlans.mapTry { plan ->
        plan.data.map {
            Plan(it.id, it.name, it.phone, it.desc, it.email)
        }.toList()
    }

или

val listPlans: List<Plan> = newPlans.mapTry {
        it.data.map { planData ->
            Plan(planData.id, planData.name, planData.phone, planData.desc, planData.email)
        }.toList()
    }

или оба:

    val listPlans: List<Plan> = newPlans.mapTry { plan ->
        plan.data.map { planData ->
            Plan(planData.id, planData.name, planData.phone, planData.desc, planData.email)
        }.toList()
    }

Стоит отметить, что это одна из причин, по которой команда JetBrains планирует удалить функциональность "it"

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