#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
) на верхнем уровне.