【问题标题】:Kotlin higher order function for passing a function to a mapKotlin 高阶函数,用于将函数传递给映射
【发布时间】:2021-02-25 04:07:34
【问题描述】:

例如,我在 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 操作员缺少什么?

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    如果你仔细观察那个 js 的 sn-p 代码,transformFunction 的类型是 function

    因此,要将 sn-p 转换为 Kotlin,还需要声明一个类型为 function 的变量 transformFunction。那你就可以走了

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

    上面的 sn-p 是从 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)}")
    
    

    【讨论】:

    • 感谢@So'n 我在两种方式都遇到错误“错误:期待顶级声明”
    • println 放在一个特定的函数中,比如main,....你得到的错误表明你在顶层调用一个函数(这是println)。
    猜你喜欢
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    相关资源
    最近更新 更多