封闭lambda的隐式参数

时间:2019-04-17 20:10:14

标签: intellij-idea kotlin lambda

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)中突出显示该代码,并说封闭lambda的隐式参数被遮盖。

可以保留原样吗?如果没有,我可以用什么代替它?

1 个答案:

答案 0 :(得分:3)

您已经嵌套了lambda,因此“ it”将表示最里面的lambda的隐式参数。此警告主要是出于可读性目的,并且避免了混淆,因为随着嵌套更多的lambda,“ it”的含义变得越来越不清楚。我建议您为嵌套lambda明确指定lambda参数:

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 team is planning to remove "it" functionality

的原因之一