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")
    

      

  • 相关阅读:
    通过system调用Am命令执行动作
    windows中如何在命令行启动启动程序
    UICC 实现框架和数据读写
    软件设计方法(转载)
    好诗欣赏——邀请 The Invitation
    leaflet使用turfjs插件,基于格点数据绘制等值线效果
    深信服防火墙做端口映射
    关于本博客的一些声明
    sqlserver – SQL Server – 包含多个字段的IN子句
    JavaScript Array join() 方法
  • 原文地址:https://www.cnblogs.com/sunrunzhi/p/9993355.html
Copyright © 2011-2022 走看看