zoukankan      html  css  js  c++  java
  • 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")
    

      

  • 相关阅读:
    MongoDB(01):Windows 平台安装 MongoDB
    MongoDB(99):NoSQL Manager for MongoDB 教程(进阶篇)
    MongoDB(99):NoSQL Manager for MongoDB 教程(基础篇)
    echarts(10):旭日图
    echarts(09):ECharts 事件处理
    echarts(08):数据的视觉映射
    echarts(07):响应式
    echarts(06):数据集(dataset)
    echarts(05):数据集(dataset)
    echarts(04):异步加载数据
  • 原文地址:https://www.cnblogs.com/sunrunzhi/p/9993355.html
Copyright © 2011-2022 走看看