函数进阶——学习函数的字面量语法

60 阅读1分钟

函数的字面量语法

除了使用def之外的,另一种定义函数的方式。

语法:

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

函数字面量语法的简化写法

  1. 函数只有一句,可以省略{}
  2. 参数只有一次,可以用_代替参数名。指定类型
val sum1 = (x: Int, y: Int) => {x + y}
  val sum2 = (x: Int, y: Int) => x + y

  val sum3:(Int, Int) => Int = _ + _

def main(args: Array[String]): Unit = {
  println(sum1(10, 20))
  println(sum2(10, 20))
  println(sum3(10, 20))
}

部分应用函数

 // 定义一个函数,它用来计算三个整数的和
  def sum1(x: Int, y: Int, z: Int): Int = {
    x + y + z
  }

  val sum2 = (x: Int, y: Int, z: Int) => x + y + z

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

  val r1 = sum2(_,20,_)
  println(r1(10, 30))

}