作家
登录

Kotlin函数与函数式编程浅析

作者: 来源: 2017-06-09 05:39:13 阅读 我要评论

  •     } 
  •     return item 
  •  
  • 效不雅和膳绫擎的代码一样。

    在C++中应用函数指针可以实现类似的效不雅:

    1. using namespace std; 
    2.  
    3. void mMap(vector list, void (*fun)(int item)); 
    4.  
    5. int main(int arg, char* args[]) { 
    6.     vector list = {2,3,4,3,2,1,2}; 
    7.     mMap(list, [](int item) -> void { cout << item << endl; }); 
    8.  
    9. void mMap(vector list, void (*fun)(int item)) { 
    10.     for(int it : list) { 
    11.         fun(it); 
    12.     } 
    13.  

    再次回到Kotlin,如不雅函数作为入参在入参列表的最后一个,你还可以如许做,直接写在大年夜括号内:

    1. fun main(args: Array) { 
    2.     log { sum(1,2) } 
    3.  
    4. fun  log(function: () -> T) { 
    5.     val result = function() 
    6.     println("result -> $result"
    7.  

    是不是有点像gradle设备文件的写法,所以Kotlin可以很便利的编写 范畴专用说话(DSL)

    它不是一个通俗的变量,它必须指向一个函数,并且函数签名必须一致:

    别的Kotlin还支撑局部函数和函数作为返回值,看下面的代码:

    1. fun main(args: Array) { 
    2.     val addResult = lateAdd(2, 4) 
    3.     addResult() 
    4. //局部函数,函数引用 
    5. fun lateAdd(a: Int, b: Int): Function0 { 
    6.     fun add(): Int { 
    7.         return a + b 
    8.     } 
    9.     return ::add 
    10.  

    在lateAdd内部定义了一个局部函数,最后返回了该局部函数的引用,对结不雅应用()操作符拿到最终的结不雅,达到延迟计算的目标。

    函数作为一级公平易近当然可以像通俗对象一样放进map中,比如下面如许:

    1. val funs = mapOf("sum" to ::sum
    2. val mapFun = funs["sum"
    3. if (mapFun != null) { 
    4.    val result = mapFun(1,2) 
    5.    println(

        推荐阅读

        Netflix如何在上万台机器中管理微服务?

      如不雅办事调用的缺点率高于预先设置的缺点率。 Circuit-breaker 的状况会大年夜 CLOSED 变成 OPEN(熔断状况)。 当 Circuit-breaker 状况为 OPEN 时,所有进来的请求会被阻拦。 过一段时光,会让一些单>>>详细阅读


      本文标题:Kotlin函数与函数式编程浅析

      地址:http://www.17bianji.com/lsqh/35653.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)