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

Vit*_*lii 6 kotlin

我有一个let在另一个里面

    someMethodCall()?.let{
        // ....
        // some code here
        // ....
        val resultCall = it
        someMethod2Call()?.let {
            // ...
            val myVariable = it + resultCall
            // ... 
        }
    }
Run Code Online (Sandbox Code Playgroud)

是否有可能在科特林第二内部let可以访问it第一let和避免使用resultCall变量?

bat*_*str 16

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

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

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

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


s1m*_*nw1 5

不,这是不可能的,在这样的用例中,您绝对应该为参数使用显式名称:

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

    someMethod2Call()?.let { v2->

    }
}
Run Code Online (Sandbox Code Playgroud)