標籤:定義 color 出現 mat over math object 表示 tar
普通函數
高階函數:參數或傳回值是函數
object a_基礎 { def main(args: Array[String]): Unit = { println(mymax(1,2,math.max)) println(myadd(1)(2)) } def mymax(a:Int,b:Int,f:(Int,Int) => Int)={ //f類型的映射即函數 f(a,b) } def myadd(a:Int)={ //傳回值類型是函數,inner _ 表示函數本身 def inner(b:Int)={ a + b } inner _ }}
匿名函數
scala> arr.map((i:Int) => i*2:Int) //寫明傳回值類型res24: Array[Int] = Array(2, 4)scala> arr.map((i:Int) => i*2) //推斷傳回值類型res25: Array[Int] = Array(2, 4)
scala> arr.map((i) => i*2) //類型推斷res29: Array[Int] = Array(2, 4)scala> arr.map(i => i*2) //再簡化res30: Array[Int] = Array(2, 4)
scala> arr.map(_*2) //i就出現了一次,最終版res32: Array[Int] = Array(2, 4)
柯裡化
定義:將原來接受兩個參數的函數變成新的接受一個參數的函數的過程。即柯裡化後的函數返回以原來第二個參數作為參數的函數
scala> def add(a:Int,b:Int)=a+b //原函數add: (a: Int, b: Int)Int^scala> def add(a:Int)={b:Int => a + b} //柯裡化add: (a: Int)Int => Intscala> add(1)(2)res0: Int = 3scala> def add(a:Int)(b:Int) =a + b //柯裡化簡化add: (a: Int)(b: Int)Intscala> add(3)(4)res1: Int = 7
好處:將某個參數單獨拎出來,以提供更多用於類型推斷的資訊
控制抽象
在scala中,一系列語句可組成不帶參數也沒有傳回值的函數
object c_控制抽象 { def main(args: Array[String]): Unit = { runinthread(println(Thread.currentThread().getName())) runinthread(println(Thread.currentThread().getName())) } def runinthread(block: => Unit): Unit ={ new Thread() { override def run(): Unit ={ block } }.start() }}
8、高階函數