函数进阶

27 阅读2分钟

函数的字面量语法

定义

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

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

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

格式

// 定义  
val sum1 = (x:Int, y:Int)=>{x+y}  
// 调用  
var s = sum1(10,34)

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

代码示例如下:

// 定义函数的方式一:def
def getSum(x:Int,y:Int) = {
  x + y
}

// 定义函数的方式二:字面量
val getSum1 = (x:Int,y:Int) => {
  x + y
}

def main (args: Array[String]): Unit = {
  println(getSum(10,20))
  println(getSum1(10,20))
}

函数字面量的简化写法

1.代码只有一句,省略{}

2._ 占位符来替换形态

//
val getSum = (x:Int,y:Int) => {
  x + y
}

//省略{}
val getSum1 = (x:Int,y:Int) => x + y

//使用 _ 来代替形参
val getSum2 = (_:Int) + (_:Int)

//使用 _ 来代替形参,(Int,Int) => Int 就是getSum3的类型
val getSum3:(Int,Int) => Int = _ + _

def main (args: Array[String]): Unit = {
  println(getSum(10,20))
  println(getSum1(10,20))
  println(getSum2(10,20))
  println(getSum3(10,20))
}

把 函数 作为 参数

定义

把一个函数 当做 参数 传递给另一个函数

代码示例

//定义两个字面量函数,(Int,Int) => Int 看成一种数据类型
val f1:(Int,Int) => Int = _ + _

val f2:(Int,Int) => Int = _ * _

// 定义一个函数,它有三个参数
// 参数1:类型是(Int,Int) => Int 。 它表示这里需要一个函数
def test(fn:(Int,Int) => Int,x:Int,y:Int): Int = {
  fn(x,y)
}

def main (args: Array[String]): Unit = {
  println(test(f1,10,20))
  println(test(f2,10,20))
}

Scala部分应用函数

定义

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

格式

// 定义普通函数  
def mutlti(x:Int, y:Int, z:Int) = {  
  println(s"$x, $y, $z")  
  x * y * z  
}  
// 传入部分参数,返回部分函数  
var f1 = mutlti(2, _, _)  
// 调用部分函数  
println( f1(10, 5) )

代码示例

/*
* 部分应用函数
*
* 如果一个函数需要三个参数,而我们只给了两个参数,会怎么样
 */

def getSum(a:Int,b:Int,c:Int): Int = {
  a + b + c
}

def main (args: Array[String]): Unit = {
  println(getSum(10,20,30))

  val t = getSum(10,20,_) // t 就是部分应用函数

  val t1 = getSum(_,20,_) // t 就是部分应用函数

  println(t(50))

  println( t1(20,50) )
}