函数进阶

19 阅读2分钟

一) 函数 字面量 语法

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

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

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


object l32 {
  /*
  *函数字面量语法,另一种定义函数的方式
   */
  // 定义一个函数,求两个数的和
  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))
  }

}

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

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

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


object l33 {
  /*
函数字面量语法的简化写法
函数体只有一句,可以省略 { }
参数只用一次,可以用_代替参数名。指定类型。
**/
  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))
  }

}

Scala部分应用函数

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


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

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