web-dev-qa-db-ja.com

囲んでいるラムダの暗黙的なパラメータは影付き

_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)で強調表示し、囲んでいるラムダの暗黙的なパラメーターが隠されていると述べています。

これをそのままにしても大丈夫ですか?そうでない場合、何に置き換えることができますか?

8
Raj

ラムダをネストしているため、「it」は最も内側のラムダの暗黙的なパラメータを表します。この警告は主に読みやすさの目的であり、ラムダをネストすると「それ」の意味がより不明確になるため、混乱を避けるためです。ネストされたラムダに対してラムダパラメータを明示的に指定することをお勧めします。

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()
    }

これが理由の1つであることを指摘するのは価値があります JetBrainsチームが「it」機能を削除することを計画している

16
glisu