在Kotlin中有一个不太难看的方法来返回函数吗?

这个声明是有效的,但不是最漂亮的代码。 有没有办法返回功能不难看? 我试过(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") } 

编辑:一个更具体的例子:

 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) } } 

首先,你可以使用lambda语法简化你的代码,使用显式参数和内联val f

 val writeStuff: (PrintWriter) -> (String) -> Unit = { writer -> { writer.println(it) } } 

但是由于Kotlin支持局部函数声明,所以甚至可以使writeStuff成为本地fun而不是val

这将导致以下代码:

 fun writeStuff(writer: PrintWriter): (String) -> Unit { return { writer.println(it) } } 

或者,使用单个表达式语法 ,

 fun writeStuff(writer: PrintWriter): (String) -> Unit = { writer.println(it) } 

但是,用法是一样的:

 PrintWriter("...").use { writeStuff(it)("...") }