代码之家  ›  专栏  ›  技术社区  ›  Vitalii

` let`inside`let`in kotlin:如何访问第一个'it`

  •  5
  • Vitalii  · 技术社区  · 6 年前

    我有一个 let 在另一个里面

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

    在科特林的第二个房间里有可能吗 访问 it 第一个 避免使用 resultCall 变量?

    4 回复  |  直到 6 年前
        1
  •  16
  •   battlmonstr    6 年前

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

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

    使用不同的名称以避免内部块中变量的阴影,如您的示例所示:

    someMethodCall()?.let {
        resultCall ->
        // ... some code here ...
        someMethod2Call()?.let {
            resultCall2 ->
            // ...
            val myVariable = resultCall2 + resultCall
            // ... 
        }
    
        2
  •  5
  •   s1m0nw1    6 年前

    不,这是不可能的,在这种情况下,您应该为参数使用显式名称:

    someMethodCall()?.let{ v1->
        // ....
        // some code here
        // ....
    
        someMethod2Call()?.let { v2->
    
        }
    }
    
        3
  •  1
  •   EpicPandaForce Jigar Joshi    6 年前

    如果你给变量命名会有帮助。

    someMethodCall()?.let { resultCall ->
        // ....
        // some code here
        // ....
        someMethod2Call()?.let { otherResult ->
            // ...
            val myVariable = resultCall + otherResult
            // ... 
        }
    }
    
        4
  •  0
  •   Rasoul Miri    6 年前

    你可以用这种方式

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