Scala函式的應用:以函式作為引數(重點)
阿新 • • 發佈:2022-03-05
函式的應用:以函式作為引數(重點)
以函式作為引數、以函式中作為返回值
統稱為高階函式
package com.shujia.scala object Demo15 { def main(args: Array[String]): Unit = { /** * 以函式作為引數 * * f:是一個引數為String型別、返回值為Int型別的函式 * fun1是一個引數為f,沒有返回值的函式 * */ //定義一個函式,(引數為String型別、返回值為Int型別的函式)作為定義函式的引數 def fun1(f:String => Int):Unit= { //在定義的函式內,呼叫傳入進來的函式 val i: Int = f("666") println(i) //666 } //定義一個函式,作為呼叫fun1函式時需要傳入的引數 def f1(str:String):Int = { str.toInt } //呼叫定義的函式fun1,需要傳入一個引數為String型別、返回值為Int型別的函式 fun1(f1) } }
執行順序
使用lambda格式作為引數
package com.shujia.scala object Demo15 { def main(args: Array[String]): Unit = { /** * 以函式作為引數 * * f:是一個引數為String型別、返回值為Int型別的函式 * fun1是一個引數為f,沒有返回值的函式 * */ //定義一個函式,(引數為String型別、返回值為Int型別的函式)作為定義函式的引數 def fun1(f:String => Int):Unit= { //在定義的函式內,呼叫傳入進來的函式 val i: Int = f("666") println(i) //666 } //使用lambda格式作為引數 fun1((str:String) => str.toInt) //lambda的引數型別可以省略,lambda表示式引數型別會自動推斷 // fun1(s => s.toInt) //如果lambda的引數只使用了一次可以使用下劃線代替 // fun1(_.toInt) } }
以函式作為引數應用舉例
package com.shujia.scala object Demo15 { def main(args: Array[String]): Unit = { //定義一個數組 val arr: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8) arr.foreach((i:Int) =>{ println(i + 2) //3 4 5 6 7 8 9 10 (實際是一行一個元素,這樣寫方便檢視) }) /** * foreach:一行一行遍歷陣列中的元素, 將陣列中的元素一個一個傳遞給後面的函式 * foreach 將迴圈之後需要做的處理交給呼叫者,呼叫者傳一個函式進去 */ //簡寫 arr.foreach(i=>println(i+2)) //3 4 5 6 7 8 9 10 (實際是一行一個元素,這樣寫方便檢視) //再簡寫(這種簡寫只能遍歷原始的元素,無法對元素進行操作) arr.foreach(println) //1 2 3 4 5 6 7 8 (實際是一行一個元素,這樣寫方便檢視) /** * println 是一個引數為Any 沒有返回值的函式 * arr.foreach 需要的是引數為Int、沒有返回值的函式(剛好可以傳入 println) * * scala函式的呼叫也符合多型的思想 */ } }