函数进阶

56 阅读1分钟

一.函数的字面量语法

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

2.字变量语法,看起来就像给变量赋值

3.有一个箭头符号

object Base49 {
  def sum(x:Int,y:Int):Int={
    x+y
  }
  //字变量语法,看起来就像给变量赋值
  //val a =1
  val sum1=(x:Int,y:Int)=>{x+y}
  def main(args:Array[String]):Unit={
    val a=2
    val n=5
    println(s"$a+$n=${sum1( a,n)}")
  }
}

4.特殊写法(简写):①.函数只有一句代码,可以省略{};②如果参数只使用了一次,那么可以使用_来代替,要加上参数的类型

object Base50 {
  def sum(x:Int,y:Int):Int={
    x+y
  }
  //字变量语法,看起来就像给变量赋值
  //val a =1
  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={
    val a=2
    val n=5
    println(s"$a+$n=${sum1( a,n)}")
    println(s"$a+$n=${sum2( a,n)}")
    println(s"$a+$n=${sum3( a,n)}")
    println(s"$a+$n=${sum4( a,n)}")
  }
}

二.把函数作为参数

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

eg:

object Base51 {
  val getMax=(x:Int,y:Int) =>if(x>y)x else y
  val getMin=(x:Int,y:Int) =>if(x>y)x else y
  val test =(x:(Int,Int)=>Int,a:Int,b:Int)=>{
    println("test被调用")
    println(x(a,b))
  }
  def main(args:Array[String]):Unit={
    test(getMax,1,2)
  }
}

三.Scala部分应用函数

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

object Base53 {
  //部分应用函数,在调用函数的时候,只传入一部分参数
  val mul =(a:Int,b:Int,c:Int)=>a*b*c
  def main(args: Array[String]): Unit = {
    
    val rst=mul(2,3,4)
    val f =mul(2,3,_)
    var rst1=f(5)
    println(rst)
    println(rst1)
  }

}