scala函数的特殊写法与应用

30 阅读2分钟

一: 函数的字面量语法

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

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

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

定义: val sum1 = (x:Int, y:Int)=>{x+y}
调用: var s = sum1(10,34)
要点:
1:有一个箭头符号 =>
2省略了def,省略了返回值类型

object txy44 {
  def main(args: Array[String]): Unit = {
    val sum1 = (x:Int,y:Int) => {x + y}
    val a = 2
    val b = 3
    println(sum1(a,b))
  }
}

特殊的写法:
1:函数只有一句代码可以省略{ }
2:如果参数只用了一次,那么可以用_代替,要加上参数的类型

object txy44 {
  def main(args: Array[String]): Unit = {
    v*al sum1 = (x:Int,y:Int) => {x + y}
    val sum2 = (x:Int,y:Int) => x+y
    val sum3 : (Int,Int) => Int = { _ + _ }
    val sum4 = (_:Int) + (_:Int)
    val a = 2
    val b = 3
   +
    println(sum1(a,b))
    println(sum2(a,b))
    println(sum3(a,b))
    println(sum4(a,b))
  }
}

二:把函数作为参数

某个函数的参数是函数

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

object txy45 {
  def main(args: Array[String]): Unit = {
    val max = (x:Int,y:Int) => if(x>y) x else y
    val min = (x:Int,y:Int) => if(x>y) y else x
    val t = (x:(Int,Int)=>Int,a:Int,b:Int) => {
      println("t被调用")
      println(x(a,b))
      x
    }
    println(max(1,9))
    println(min(1,9))
    t(max,1,2)
  }
}
    

三scala部分应用函数

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

object txy46 {
 def main(args: Array[String]): Unit = {
   val sul = (a:Int,b:Int,c:Int) =>a+b+c
   val rst = sul(1,2,4)
   val rsu = sul(1,2,_)
   //部分应用函数:在调用函数时,之传入一部分参数
   val rse = rsu(4)
   //rse给reu的_处补了个4 =>sul(1,2,4) =>7
   println(rst)
   println(rse)
 }
}