什么是Kotlin lambda体内的"它"?

Suj*_*tha 24 java jvm file kotlin

例如,在以下两个代码中:

File("./file1.txt").forEachLine { println(it) }
Run Code Online (Sandbox Code Playgroud)

File("somefile.txt").bufferedWriter().use { out ->
    history.forEach {
        out.write("${it.key}, ${it.value}\n")
    }
}
Run Code Online (Sandbox Code Playgroud)

在这段代码中it意味着什么?

hol*_*ava 32

变量是lambda中的隐式参数.

另一个有用的约定是,如果一个函数文字只有一个参数,它的声明可以省略(和 - >一起),它的名字就是:


Nan*_*ano 10

这是 kotlin org 文档:it:单个参数的隐式名称

例如

ints.filter { value -> value > 0 }
Run Code Online (Sandbox Code Playgroud)

你可以将其简化为:

ints.filter { it > 0 }
Run Code Online (Sandbox Code Playgroud)

虽然你不能使用

ints.filter { value > 0 }
Run Code Online (Sandbox Code Playgroud)


JAM*_*ANG 6

请参考以下说明。

它:单个参数的隐式名称

Lambda表达式只有一个参数是很常见的。

如果编译器可以自己找出签名,则可以不声明唯一的参数,而忽略->。该参数将以其名称隐式声明:

ints.filter { it > 0 } // this literal is of type '(it: Int) -> Boolean'
Run Code Online (Sandbox Code Playgroud)

https://kotlinlang.org/docs/reference/lambdas.html#it-implicit-name-of-a-single-parameter