Функция высшего порядка Kotlin для передачи функции на карту

#kotlin

#kotlin

Вопрос:

У меня есть, например, в JS функция более высокого порядка, функция, переданная на карту:

 const numbers = [1, 1, 2, 3, 5, 8]
const transformFunction = x => x   2

console.log ("transformatio:: ", numbers.map(transformFunction))
  

Если я хочу выполнить это в Kotlin, у меня есть:

 val numbers = setOf(1, 1, 2, 3, 5, 8)

fun transformFunction (x: Int): Int {
    return x   2
}

println("transformFunction:: ${numbers.map{transformFunction}}")
  

Но я получаю ошибки:

ошибка: ожидание объявления верхнего уровня println(«transformFunction:: $ {numbers.map{transformFunction}}»)

Итак, чего не хватает для передачи функции моему map оператору?

Ответ №1:

Если вы обратите пристальное внимание на этот фрагмент кода js, transformFunction имеет тип function .

Итак, чтобы перевести этот фрагмент в Kotlin, объявите переменную transformFunction с типом function . Тогда все готово

 val numbers = setOf(1, 1, 2, 3, 5, 8)
val transformFunction: (Int) -> Int = { it   2 }
println("transformFunction:: ${numbers.map(transformFunction)}")
  

Приведенный выше фрагмент является самым близким переводом с JS на Kotlin. Но если вы хотите сохранить свой код таким, какой он есть, без стольких изменений, то вы здесь

 val numbers = setOf(1, 1, 2, 3, 5, 8)

fun transformFunction (x: Int): Int {
    return x   2
}

println("transformFunction:: ${numbers.map{transformFunction(it)}}")
// or
println("transformFunction:: ${numbers.map(::transformFunction)}")

  

Комментарии:

1. спасибо @So’n, я получаю ошибки обоими способами «ошибка: ожидание объявления верхнего уровня»

2. поместите println в определенную функцию, например main ,…. Полученная вами ошибка указывает на то, что вы вызываете функцию (которая есть println ) на верхнем уровне.