Функция Котлина, которая получает два числа и возвращает сумму и умножает их - PullRequest
0 голосов
/ 02 мая 2018

Я новичок в лямбда-выражениях Kotlin, я пытаюсь построить функцию, имеющую два аргумента, и возвращает функцию с параметрами:

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

Но он не компилируется. Вообще, как я могу вернуть функцию без головы в Kotlin?

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Kotlin не поддерживает кортежи . Вы должны будете использовать пару:

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) }
0 голосов
/ 02 мая 2018

, пожалуйста, помогите мне создать функцию, которая имеет два аргумента и возвращает функцию с двумя аргументами.

Это функция, которая принимает два аргумента и возвращает функцию с двумя аргументами.

fun binaryFunReturningBinaryFun(a: Int, b: Int): (Int, Int) -> Int =
        { x, y -> (a + x) * (b + y) }
0 голосов
/ 02 мая 2018

Я сделал то же самое, используя приведенный ниже код, и это сработало.

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)

Объяснение

Вы хотите вернуть функцию из вашей лямбда-функции, поэтому, прежде всего, вам нужно создать функцию, которую вы хотите вернуть. Итак, я создал rtn функцию для этого. Я создал rtn также как лямбда-функцию. Вы можете создавать как хотите.

Затем я изменил тип возврата sumAndMultiply лямбда-функции и вернул функцию rtn, которую мы создали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...