我是Kotlin lambda表达式的新手,我尝试构建一个具有两个参数的函数,并返回一个带参数的函数:
val sumAndMultiply:(Int,Int) -> (Int,Int) -> Unit = { a,b -> (a+b,a*b)}
但它没有编译。 一般来说,如何在Kotlin中返回无头功能?
答案 0 :(得分:4)
请帮我创建一个有两个参数的函数,并返回一个带有两个参数的函数。
这是一个函数,它接受两个参数并返回一个带有两个参数的函数。
fun binaryFunReturningBinaryFun(a: Int, b: Int): (Int, Int) -> Int =
{ x, y -> (a + x) * (b + y) }
答案 1 :(得分:3)
Kotlin不支持tuples。你必须使用Pair:
val sumAndMultiply: ((Int,Int) -> Pair<Int,Int>) = { a,b -> Pair(a+b,a*b) }
另一种解决方案是创建数据类,例如:
data class SumAndMultiplication(val sum: Int, val multiplication: Int)
val sumAndMultiply2: ((Int,Int) -> SumAndMultiplication) = { a,b -> SumAndMultiplication(a+b,a*b) }
答案 2 :(得分:2)
我使用下面的代码做了同样的事情并且它有效。
var rtn:(Int,Int) -> Unit = {x,y -> println("${x} ${y}")}
val sumAndMultiply: (Int,Int) -> Any = { a,b -> rtn(a+b,a*b)}
sumAndMultiply(1,3)
<强>解释强>
你想从lambda函数返回一个函数,所以首先你必须创建你想要返回的函数。所以,我为此创建了rtn
函数。我还创建了rtn
作为lambda函数。您可以根据需要创建。
然后我更改了sumAndMultiply
lambda函数的返回类型并返回了我们创建的函数rtn
。