Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 内联扩展函数(let/run/allow/…)生成未使用的局部变量_Kotlin - Fatal编程技术网

Kotlin 内联扩展函数(let/run/allow/…)生成未使用的局部变量

Kotlin 内联扩展函数(let/run/allow/…)生成未使用的局部变量,kotlin,Kotlin,使用Kotlin1.4-rc 对于此代码块: try { socket.getOutputStream().let { it.write(bytes) it.flush() } } catch (e: IOException) { ... } 反编译结果为: try { OutputStream var2 = this.socket.getOutputStream(); boolean var3 = false; boolean va

使用Kotlin
1.4-rc

对于此代码块:

try {
   socket.getOutputStream().let {
      it.write(bytes)
      it.flush()
   }
} catch (e: IOException) {
   ...
}
反编译结果为:

try {
   OutputStream var2 = this.socket.getOutputStream();
   boolean var3 = false;
   boolean var4 = false;
   int var6 = false;
   var2.write(bytes);
   var2.flush();
} catch (IOException var7) {
   ...
}
那么,你为什么要这样做

boolean var3 = false;
boolean var4 = false;
已生成,由于它们未使用,它们的用途是什么?

请参阅YouTrack上的评论

调试器使用这些布尔值来确定我们是否在内联函数/lambda中。 不幸的是,println是
@InlineOnly
,因此,您将看不到变量的名称(
@InlineOnly
函数没有局部变量表和行号信息,尽管这将发生更改)。但是,如果您创建自己的内联函数并使用它,您将在LVT中创建$i$f$和$i$a$等变量(要查看LVT,请将-l标志传递给javap)。这些变量的值并不重要(始终为false,尽管将来可以更改),但这些变量的范围是调试器要查看的。如果我们在$i$f…范围内,我们在内联函数内,如果我们在$i$a…范围内,我们在内联lambda内

请参阅YouTrack上的评论

调试器使用这些布尔值来确定我们是否在内联函数/lambda中。 不幸的是,println是
@InlineOnly
,因此,您将看不到变量的名称(
@InlineOnly
函数没有局部变量表和行号信息,尽管这将发生更改)。但是,如果您创建自己的内联函数并使用它,您将在LVT中创建$i$f$和$i$a$等变量(要查看LVT,请将-l标志传递给javap)。这些变量的值并不重要(始终为false,尽管将来可以更改),但这些变量的范围是调试器要查看的。如果我们在$i$f…范围内,我们在内联函数内,如果我们在$i$a…范围内,我们在内联lambda内