这个声明有效,但不是最漂亮的代码.有没有办法让函数不那么难看?我试过(s: String) -> writer.println(s)但这没用.
val writeStuff: (PrintWriter) -> (String) -> Unit = {
val writer = it
val f: (String) -> Unit = {
writer.println(it)
}
f
}
PrintWriter("test").use { writeStuff(it)("TEST") }
Run Code Online (Sandbox Code Playgroud)
编辑:更具体的例子:
val writeStuff: (PrintWriter) -> (String) -> Unit = { writer ->
{ writer.println(it) }
}
val sendStuff: (Any) -> (String) -> Unit = { sender ->
{ sender.equals(it) }
}
@Test fun test1() {
val li = listOf("a", "b", "c")
val process: List<(String) -> Unit> =
listOf(writeStuff(PrintWriter("a")), sendStuff(Object()))
process.map { li.map(it) }
}
Run Code Online (Sandbox Code Playgroud)
hot*_*key 19
首先,您可以使用带有显式参数和内联的lambda语法来简化代码val f:
val writeStuff: (PrintWriter) -> (String) -> Unit = { writer ->
{ writer.println(it) }
}
Run Code Online (Sandbox Code Playgroud)
但是由于Kotlin支持本地函数声明,你甚至可以创建writeStuff一个本地fun而不是一个val.
这将导致以下代码:
fun writeStuff(writer: PrintWriter): (String) -> Unit {
return { writer.println(it) }
}
Run Code Online (Sandbox Code Playgroud)
或者,使用单一表达式语法,
fun writeStuff(writer: PrintWriter): (String) -> Unit = { writer.println(it) }
Run Code Online (Sandbox Code Playgroud)
但是,用法将是相同的:
PrintWriter("...").use { writeStuff(it)("...") }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5312 次 |
| 最近记录: |