函数进阶

29 阅读2分钟

函数的字面量语法

函数字面量语法,另一种定义函数的方式

语法

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

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

object z30 {
  /*
  * 函数字面量语法,另一种定义函数的方式
   */

  //定义一个函数,求两个数的和
  def sum1(x:Int,y:Int):Int = {
    x + y
  }
  /*
  * 函数字面量语法d的简化写法
  * 1.函数体只有一句,可以省略{}
  * 2.参数只用一个,可以用_代替参数名。指定类型。
   */
  var sum2 = (x:Int,y:Int) => { x+y }
  def main(args: Array[String]): Unit= {
    println(sum1(10, 20))
    println(sum2(10, 20))
  }
}

[简化写法]

Scala的函数字面量的简化方式有两种方式:

第一种方式为:_(占位符)。如果函数中的参数在方法体中只使用了一次,可以用_替换。

第二种方式为:只有一个表达式时,可以省略括号。

object z31 {
  /**
   *  函数字面量语法的简化写法
   *  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))
  }
}

部分应用函数

如果一个函数包含多个参数,对该函数传递部分参数使得这个函数返回一个函数,那么这种函数叫做部分应用函数。

object z32 {
  /**
   * 部分应用函数
   */

  // 定义一个函数,它用来计算三个整数的和
//  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))
  }
}