函数进阶

42 阅读1分钟

一、函数的字面量语法

语法:var 变量 = (参数列表)=>{方法体}

它省略了def,函数名以及函数的返回值类型。

/*
  函数字面量语法,另一种定义函数的方式
   */
  // 定义一个函数,求两个数的和
  def sum1(x:Int,y:Int):Int = {
    x + y
  }
  // 函数字面量语法
  // 相对于使用def来说:它:
  // 1.省略了返回值类型
  // 2.省略了函数名,现在就是变量名
  // 3.多了一个=>
  val sum2 = (x:Int,y:Int) => {x + y}
  
  def main(args: Array[String]): Unit = {
    println(sum1(10,20))
    println(sum2(10,20))
  }

}

二、部分应用函数

定义一个接收函数作为参数的函数def a(f:()=>Unit)={},其中函数的类型()=>Unit部分()为函数的参数,Unit为函数的返回值。通过定义字面量传递值时,字面量必须和函数的类型匹配。

/*
  部分应用函数
   */
  // 定义一个函数,它用来计算三个整数的和
  // def sum1(a:Int,b:Int,c:Int):Int = {
  // a+b+c
  // }
  val sum2 = (a:Int,b:Int,c:Int) => a+b+c

  def main(args: Array[String]): Unit = {
    // println(sum1(10,20,30))
    // 如果参数给的不够,会报错!
    // println(sum2(10,20))
    val r=sum2(10,20, _) // _表示一个占位符:现在还不知道具体是什么
    // r就是部分应用函数!对sum2来说,它只有一部分参数
    println(r(50))
    val r1=sum2(_,20,_)
    println(r1(10,30))

  }

}