• 函数式编程


    函数作为值传递

    scala> def fun1(field: String,field1: String) = println(s"fun1 field = $field, field1 = $field1")
    fun1: (field: String, field1: String)Unit
    
    scala> def fun2 = fun1 _
    fun2: (String, String) => Unit
    
    scala> fun2("info1","info2")
    fun1 field = info1, field1 = info2
    

    匿名函数

    scala> def fun3 = (i: Int, j: Int) => println(s"i = $i, j = $j")
    fun3: (Int, Int) => Unit
    
    scala> fun3(1,2)
    i = 1, j = 2
    

    高阶函数 (参数为函数的函数)

    // 方法名: (参数类型,参数类型) => 返回值类型
    scala> def fun4(name: String, func: (String, String) => Unit): Unit = func(name,name+"1")
    fun4: (name: String, func: (String, String) => Unit)Unit
    
    // (字段名: 类型, 字段名: 类型) => 函数体
    scala> fun4("abc",(field1: String,field2: String) => println(s"field1 = $field1, field2 = $field2"))
    field1 = abc, field2 = abc1
    

    参数

    // 无参数
    scala> def fun(f: () => Unit) = f
    fun: (f: () => Unit)() => Unit
    
    // 一个参数
    scala> def fun(f: String => Unit) = f
    fun: (f: String => Unit)String => Unit
    

    实例

    // 返回的是一个值域
    scala> 1 to 10
    res6: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    
    // 包含一个值域的类型的数组
    scala> Array(1 to 10)
    res8: Array[scala.collection.immutable.Range.Inclusive] = Array(Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
    
    // 取出值域的每一个元素放入数组
    scala> val arr = Array(1 to 10:_*)
    arr: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    
    // 传入函数对每一元素应用函数,取返回值组成一个新的数组
    scala> arr.map((x: Int) => x + 1)
    res10: Array[Int] = Array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
    
    // 自动类型推断
    scala> arr.map(x => x + 1)
    res11: Array[Int] = Array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
    
    // 使用占位符 _ 代表每一个元素
    scala> arr.map(_ + 1)
    res12: Array[Int] = Array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
    

    闭包

    函数的变量不在其作用域内被调用,就是闭包的概念

    def funOut(): Unit ={
        val num = 10
        def funIn(): Unit ={
            // funIn 直接访问外面的 num变量
            println(num)
        }
    
        funIn()
    }
    

    柯理化

    def main(args: Array[String]): Unit = {
        // fun1 和 fun2 等价
        fun1(1,2)
        fun2(1)(2)
    }
    
    // 传入2个参数
    def fun1(x: Int, y: Int): Unit ={
        println(s"x = $x, y = $y")
    }
    
    // 将参数转换为函数
    def fun2(x: Int) = (y: Int) => println(s"x = $x, y = $y")
    
  • 相关阅读:
    Spring Cloud入门
    HTML常用标签
    Spring boot 入门
    数据库 基本操作
    jquery中的ajax方法参数
    反射详解
    SpringMVC框架
    Java NIO
    MQ(消息队列)的使用场景以及常见的MQ
    英文字母和中文汉字在不同字符集编码下的字节数
  • 原文地址:https://www.cnblogs.com/studyNotesSL/p/11443797.html
Copyright © 2020-2023  润新知