scala的函数进阶

58 阅读2分钟

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

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

相对于使用def来说,它:

  • 省略了返回值
  • 省略了函数名,现在就是变量名
  • 多了一个=>

案例:定义一个函数,求两个数的和

object basic46 {
  //def
  def sum1(x:Int,y:Int): Int = {
    x + y
  }
  
  //字面量语法
  val sum2 = (x:Int,y:Int) => { x+y }
  
  def main(args: Array[String]): Unit = {
    println(sum(10,20))
    println(sum2(10,20))
  }
}

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

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

 val sum3:(Int,Int) => Int = _ + _
 val sum4 = ( _ : Int) + ( _ : Int)
 
 def main(args: Array[String]): Unit = {
   println(sum1(10,20))
   println(sum2(10,20))
   println(sum3(10,20))
 }
}

部分应用函数

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

案例:定义一个函数,他用来计算三个整数的和

object basic48 {
  //def
  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(sum1(10,20))  参数没有给够,会报错!
   
    //传入部分参数,返回部分函数
    val r = sum2(10,20,_)  // _ 表示一个占位符:现在还不知道具体是什么
    //调用部分函数
    println(r(50))   // r 就是部分应用函数,对sum2来说,它只有一部分参数

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