`let` внутри` let` в Kotlin: как получить доступ к первому `it` - PullRequest
0 голосов
/ 10 июня 2018

У меня есть один let внутри другого

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

Возможно ли в Kotlin во втором let получить доступ к it первого let и избежать использования переменной resultCall

Ответы [ 4 ]

0 голосов
/ 17 октября 2018

Вы можете использовать этот способ

  someMethodCall()?.let{ nameOne ->
       // ....
       // some code here
       // ....
       val resultCall = nameOne
       someMethod2Call()?.let { -> nameTwo
          // ...
          val myVariable = nameTwo + resultCall
          // ... 
      }
 }
0 голосов
/ 10 июня 2018

it - это имя по умолчанию для лямбда-аргумента.it удобен для коротких лямбд, но вы не должны использовать его для более длинных лямбд.Для более длинных лямбд-кодов сделайте код более читабельным, указав явное имя аргумента:

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

Используйте разные имена, чтобы избежать затенения переменной во внутреннем блоке, как в вашем примере:

someMethodCall()?.let {
    resultCall ->
    // ... some code here ...
    someMethod2Call()?.let {
        resultCall2 ->
        // ...
        val myVariable = resultCall2 + resultCall
        // ... 
    }
0 голосов
/ 10 июня 2018

Это помогает, если вы называете свои переменные.

someMethodCall()?.let { resultCall ->
    // ....
    // some code here
    // ....
    someMethod2Call()?.let { otherResult ->
        // ...
        val myVariable = resultCall + otherResult
        // ... 
    }
}
0 голосов
/ 10 июня 2018

Нет, это невозможно, и вы обязательно должны использовать явные имена для параметров в таких случаях:

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

    someMethod2Call()?.let { v2->

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...