Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与Java高度可互操作,可以同时用在一个项目中。InfoQ
高阶函数就是可以接受函数作为参数并返回一个函数的函数。Kotlin-in-Chinese

Kotlin 支持函数作为参数传递,无需构建对象来包装函数。

无参数函数调用

class Hello {

    fun say() {
        Timber.i("Hello World")
    }

    /**
    * 在 Kotlin 中无返回为 Unit
    *
    * 此方法接收一个无参数的函数并且无返回
    *
    * 使用参数名加 () 来调用
    */
    fun people(hello: () -> Unit) {
        hello()
    }

    /**
    * 在 kotlin 中有一个约定,如果最后一个参数是函数,可以省略括号
    */
    fun main() {
        people ({ say() })
        people { say() }
    }

}

** 调用函数需使用参数名加 () **

 

有参数函数调用

class Hello {

    fun say(msg: String) {
        Timber.i("Hello $msg")
    }

    /**
    * 当调用的函数有形参时,
    * 需要在调用的函数声明,并使用声明的形参;
    * 函数参数中的形参无法使用
    */
    fun people(arg0: String, hello: (arg1: String) -> Unit) {
        hello(arg0)
        // hello(arg1) 这样调用将报错
    }

    fun main() {
        people("Android") { say("World") }
    }

}

 

传入给 arg0 的值貌似未生效 ** ??? **

  • @param arg0 实参
  • @param arg1 形参
    people函数中,arg0 是实参,而 arg1 是形参,所以不能直接使用;
    有点绕 😂 ,可以看下这篇博文 Kotlin 双冒号 :: 使用



作者:_10_01_
链接:https://www.jianshu.com/p/c69f7ce88784
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐