我在另一个
中有一个let
someMethodCall()?.let{
// ....
// some code here
// ....
val resultCall = it
someMethod2Call()?.let {
// ...
val myVariable = it + resultCall
// ...
}
}
第二个let
内的Kotlin是否可以访问第一个it
的{{1}}并避免使用let
变量?
答案 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
// ...
}
}