函数的进阶

31 阅读2分钟

1.函数的字面量语法

(1)另一种定义函数的方式

定义函数的方法一:def 定义函数的方式二:字面里 有一定的例子:

object base43 {
  /*
   * 函数字面量
   * 另一种定义函数的方式
   */

  // 定义函数的方式一:def
  def getSum(x: Int, y: Int): 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))
  }
}

这个例子的效果结果如图所示:

image.png (2).Scala的函数字面量的简化方式有两种方式: 第一种方式为:(占位符).如果函数中的参数在方法体中只使用_替换。第二种方式为:只有一个表达式时,可以省略括号。 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) 具体例子展示:

object base44 {

  /*
   * 函数字面量的简化写法
   * 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))
  }
}

运行结果如图所示:

image.png 3.当一个函数有多个参数,需要定义好函数 输入以下代码:

object base45 {
  /*
  把一个函数 当做参数 传递给另一个函数
  */

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

  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 = {
    // 明确输出test(f1, 10, 20)和f1(10, 20)的结果并比较
    println(s"test(f1, 10, 20) = ${test(f1, 10, 20)}, f1(10, 20) = ${f1(10, 20)}, equals: ${test(f1, 10, 20) == f1(10, 20)}")
    println(s"test(f2, 10, 20) = ${test(f2, 10, 20)}")
  }

运行结果如图所示;

image.png