8、高階函數

來源:互聯網
上載者:User

標籤:定義   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、高階函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.