在Kotlin里面`let`里面`let`:如何访问第一个`it`

时间:2018-06-10 19:29:50

标签: kotlin

我在另一个

中有一个let
    someMethodCall()?.let{
        // ....
        // some code here
        // ....
        val resultCall = it
        someMethod2Call()?.let {
            // ...
            val myVariable = it + resultCall
            // ... 
        }
    }

第二个let内的Kotlin是否可以访问第一个it的{​​{1}}并避免使用let变量?

4 个答案:

答案 0 :(得分:12)

it是lambda参数的默认名称。 it对于短lambda很方便,但是你不应该将它用于更长的lambda。对于更长的lambdas,通过指定显式参数名称使代码更具可读性:

someMethodCall()?.let {
    resultCall ->
    // ... some code that uses "resultCall" instead of "it" ...
}

使用不同的名称来避免在内部块中隐藏变量:如示例所示:

someMethodCall()?.let {
    resultCall ->
    // ... some code here ...
    someMethod2Call()?.let {
        resultCall2 ->
        // ...
        val myVariable = resultCall2 + resultCall
        // ... 
    }

答案 1 :(得分:5)

不可能,你绝对应该在这些用例中使用显式名称:

someMethodCall()?.let{ v1->
    // ....
    // some code here
    // ....

    someMethod2Call()?.let { v2->

    }
}

答案 2 :(得分:1)

如果您为变量命名,这会有所帮助。

someMethodCall()?.let { resultCall ->
    // ....
    // some code here
    // ....
    someMethod2Call()?.let { otherResult ->
        // ...
        val myVariable = resultCall + otherResult
        // ... 
    }
}

答案 3 :(得分:0)

您可以使用这种方式

  someMethodCall()?.let{ nameOne ->
       // ....
       // some code here
       // ....
       val resultCall = nameOne
       someMethod2Call()?.let { -> nameTwo
          // ...
          val myVariable = nameTwo + resultCall
          // ... 
      }
 }