函数进阶

45 阅读1分钟

一.函数的字面量语法

object t49 {
 def sum(x:Int, y:Int):Int = {
   x+y
 }
  //字面量语法:看起来就像给变量默值
  //val a = 1
  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)}")
  }
}

二.把函数作为参数

object t50 {
  //定义一个函数,计算两数的和
  //定义一个字面量函数,计算两个数的较大者
  val getMax = (x: Int, y: Int) => if (x > y) x else y
  //定义一个字面量函数,计算两个数的较小者
  val getMain = (x: Int, y: Int) => if (x < y) y else y
  //test这个函数,它的第一个参数是一个函数
  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 t51 {
  //部分应用函数,在调函数的时候,只传入一部分参数
 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)//mul(2,3,5)
    println(rst)
    println(rst1)
  }
}