函数的进阶

36 阅读2分钟

函数的字面量语法

定义一个函数,计算两数的和

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

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

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

object Base49 {
  // 定义一个函数,计算两数的和
  def sum(x:Int,y:Int):Int={
    x+y
  }
  // 字面量语法  看起来就像给变量赋值
  val sum1=(x:Int,y:Int) => { x + y }
  /*
  *要点
  * 1.有一个箭头符号 =>
  * 2.省略def,省略了返回值类型
  *
  * 特殊的写法-简写
  * 1.函数只有一句代码,可以省略{}
  * 2.如果函数只省略了一次,那么可以用 _ 来代替。要加上参数的类型
   */
  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之外的,另一种定义函数的方式

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

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

把函数作为参数

定义一个字面量函数,计算两个数的较大者

object Base50 {
  // 定义一个函数,计算两数的和
  // 定义一个字面量函数,计算两个数的较大者
  val getMax = (x:Int,y:Int) => if(x>y) x else y
  // 定义一个字面量函数,计算两个数的较小者
  val getMin = (x:Int,y:Int) => if(x<y) x else y
  // test这个函数,它的第一个参数是一个函数。
  val test = (x:(Int,Int)=>Int,a:Int,b:Int) =>{
    println("test被调用")
    println(x(a,b))
  }
// 比较1和2的大小
  def main(args: Array[String]): Unit = {
    test(getMax,1,2)
    test(getMin,1,2)
  }
}

Scala部分应用函数

代码示例

object Base51 {
  // 部分应用函数,在调用函数的时候,只传入一部分参数。
  val mul = (a:Int,b:Int,c:Int) => a*b*c

// 比较1,2大小
  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)

  }
}