• Scala实战高手****第12课:Scala函数式编程进阶(匿名函数、高阶函数、函数类型推断、Currying)与Spark源码鉴赏


    /**
     * 函数式编程进阶:
     * 1、函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量
     * 2、函数更常用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称,
     * 一般会把它赋值给变量,在Spark源码中大量存在
     * 3、函数可以作为参数直接传递给函数,极大的简化了编程代码,在Java中需要通过callback来实现
     * 这样的功能
     * 4、当函数的返回类型是函数的时候,这就表明Scala函数实现了闭包,Scala函数其实是类和对象,
     * 所以,Scala的参数都作为了对象的成员!!!
     * 5、Scala柯里化能很好的实现链式功能
     */

    一:Scala函数编程进阶
     
    1、函数赋值给变量
     
        //把函数赋值给变量
        val f = bigData _
        f("Spark") //变量f其实也变成了函数
     
      def bigData(name: String): Unit = {
        println("Hi, " + name)
     
      }
     
    2、匿名函数定义
     
        //匿名函数
        val fun = (name: String) => println("Hi, " + name)
        fun("Kafka")
     
    3、将函数传递给方法
     
        //将函数传递给方法
        def getName(func: String => Unit, name: String) = func(name)
        getName(fun, "Scala")
     
        //map中其实也是个函数,map(item=>item*2)
        Array(1 to 10: _*).map(_ * 2).foreach(println)
     
    4、Currying定义
     
        def funcResult(message: String) = (name: String) => println(message + ": " + name)
        //funcResult("Java") //这样返回的是函数
        funcResult("Hello")("Java") //Currying函数写法
        //等同于
        val result = funcResult("Hello")
        result("Java")
    

      

  • 相关阅读:
    30分钟带你了解Docker
    30分钟了解Springboot整合Shiro
    vuejs 和 element 搭建的一个后台管理界面
    MySQL缓存参数优化(转)
    MVC+EF(CODEFIRST)+EASYUI医药MIS系统
    博客园开通打赏功能以及HTTPS打赏失效的探究 -玩转打赏功能
    SpringMVC集成rabbitmq:优化秒杀下单环节
    国内最火5款Java微服务开源项目
    SpringCloud系列——SSO 单点登录
    玩转spring boot
  • 原文地址:https://www.cnblogs.com/sunrunzhi/p/9993355.html
Copyright © 2020-2023  润新知