函数进阶

44 阅读3分钟

一:定义函数的方法

函数的字面量语法

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

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

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

scala
 体验AI代码助手
 代码解读
复制代码

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

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

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

(1)简化方式

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

scala
 体验AI代码助手
 代码解读
复制代码
/*
* 1.函数字面量简化写法
* 2,_占位符来替换形参
 */

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

}

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

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

// 使用_来代替形参。(Int,Int)→
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))
}

二:把函数作为参数

kotlin
 体验AI代码助手
 代码解读
复制代码
/*
 * 把一个函数当做参数,传递给另一个函数

  */
// 定义两个字面量函数。(Int, Int) => Int 看成一种数据类型
 val f1: (Int, Int) => Int = _ + _
 // val a: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
 体验AI代码助手
 代码解读
复制代码
/*
* 部分应用函数
*
* 如果一个函数需要三个参数,我们只给两个参数,会怎样?

 */
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))

四:高阶函数

高阶函数:是一种特殊的函数,特殊之处在于:它指使用其他函数作为参数或者返回值。

(1)map函数

scala
 体验AI代码助手
 代码解读
复制代码
* 1.map函数 对数组中每个元素执行一个函数,来得到一个新数组

 */
def main(args: Array[String]): Unit = {
  val arr1 = Array(1,2,3,4,5,6)
  // Array是一个构造器,用来定义一个数组
  // arr1就是一个数组对象,他有很多方法,其中就有map
  // for 循环来输出数组中每个元素

  val fn = (x:Int) => x * 2
  // fn是一个函数,他传输了map,map是一个高阶函数
  val arr2 = arr1.map(fn)

  // for 循环来输出数组中每个元素
  for(i <- arr2){
    println(i)