Kotlin函数接收两个数字并返回它们的和和乘

时间:2018-05-02 08:59:08

标签: android lambda kotlin

我是Kotlin lambda表达式的新手,我尝试构建一个具有两个参数的函数,并返回一个带参数的函数:

val sumAndMultiply:(Int,Int) -> (Int,Int) -> Unit = { a,b -> (a+b,a*b)}

但它没有编译。 一般来说,如何在Kotlin中返回无头功能?

3 个答案:

答案 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