scala高階函數總結

1、值函數

    將一個函數賦值給某個變量,此變量就是一個值函數

    scala> import scala.math._

    import scala.math._



    scala> val fun = sqrt _

    fun: Double => Double = <function1>


    scala> fun(25)

    res19: Double = 5.0

2、匿名函數

    無名稱的函數,即爲匿名函數,通常使用在函數的參數中

    scala> (1 to 9).reduceLeft(_ + _)

    res20: Int = 45


    scala> (1 to 9).reduceLeft( (x:Int,y:Int) => x+y)

    res21: Int = 45

3、高階函數

    以函數做爲參數的函數就是高階函數

    scala> def valueAtQuarter(fun: (Double) => Double) = fun(4)

    valueAtQuarter: (fun: Double => Double)Double


    scala> valueAtQuarter(scala.math.sqrt _)

    res22: Double = 2.0

4、柯里化

    將多個參數的函數分離,使其通過兩次調用,有點說不清楚,直接上代碼。。。

    scala> def mul (x: Int,y: Int) = x * y

    mul: (x: Int, y: Int)Int


    scala> def mul(x : Int) = (y: Int) => x * y

    mul: (x: Int)Int => Int


    scala> val x=mul(6)

    x: Int => Int = <function1>


    scala> x(5)

    res23: Int = 30


    scala> mul(6)(5)

    res24: Int = 30

    說明:mul(6)(5)先執行mul(6)返回一個函數再調用(5)


    scala> def mul(x: Int)(y: Int)= x *y

    mul: (x: Int)(y: Int)Int

    這種寫法比較容易理解,和def mul(x : Int) = (y: Int) => x * y等效

5、控制抽象

    執行一個代碼塊的內容,可以定義一個無參無返回的函數


def runThread(block: () => Unit){

  new Thread{

     override def run() {block() }

  }.start()

}

runThread( () => println("start");Thread.sleep(1000);println("end") )

飄紅部分可以省略,增加代碼可讀性

6、控制抽象與柯里化的結合實例

    

def until(condition: => Boolean)(block: =>Unit){

  if(!condition){

     block

     until(condition)(block)

  }

}

說明:condition: => Boolean等價condition: () => Boolean

        block: =>Unit等價 block: () =>Unit

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章