1. 程式人生 > >[Scala進階]--匿名函式和高階函式

[Scala進階]--匿名函式和高階函式

一 函式是第一等公民

1、把函式作為實參傳遞給另外一個函式。2、把函式作為返回值。3、把函式賦值給變數。4、把函式儲存在資料結構裡。在Scala中,函式就像普通變數一樣,同樣也具有函式的型別。二 函式型別1、定義在Scala語言中,函式型別的格式為A =>B,表示一個接受型別A的引數,並返回型別B的函式。例子:Int => String 是把整型對映為字串的函式型別2、程式碼
  1. package test_first
  2. object Demo extends App{
  3. println( apply( layout,10))
  4. // 函式 f 和 值 v 作為引數,而函式 f 又呼叫了引數 v
  5. def apply
    (f:Int=>String, v:Int)= f(v)
  6. def layout(x:Int)="["+ x.toString()+"]"
  7. def operate(f:(Int,Int)=>Int)={f(4,4)}
  8. def add(x:Int,y:Int)=x+y
  9. println(operate(add))
  10. def greeting()=(name:String)=>{"hello"+" "+ name}
  11. val test = greeting()
  12. println(test("cakin24"))
  13. def multiplyBy(factor:Double
    )=(x:Double)=>factor*x
  14. val x=multiplyBy(10)
  15. println(x(50))
  16. }
3、執行結果[10]8hello cakin24500.0三 高階函式1、定義用函式作為形參或返回值的函式,稱為高階函式。def operate(f:(Int,Int)=>Int)={f(4,4)}def greeting() =(name:String) =>{"hello" + " " + name}2、程式碼
  1. package test_first
  2. object Demo extends App{
  3. println( apply( layout,10))
  4. // 函式 f 和 值 v 作為引數,而函式 f 又呼叫了引數 v
  5. def apply(f:Int=>String, v:Int)= f(v)
  6. def layout(x:Int)="["+ x.toString()+"]"
  7. }
3、執行結果[10]四 匿名函式就是函式常量,也稱為函式文字量。在Scala裡,匿名函式的定義格式為(形參列表) =>{函式體}箭頭左邊是引數列表,右邊是函式體。使用匿名函式後,我們的程式碼變得更簡潔了。1、匿名函式為1個引數。var inc = (x:Int) => x+1以上例項的 inc 現在可作為一個函式,使用方式如下:var x = inc(7)-12、匿名函式中定義多個引數:var mul = (x: Int, y: Int) => x*ymul 現在可作為一個函式,使用方式如下:println(mul(3, 4))3、不給匿名函式設定引數,如下所示:var userDir = () => { System.getProperty("user.dir") }userDir 現在可作為一個函式,使用方式如下:println( userDir() )五 匿名函式例項
  1. package test_first
  2. object Demo extends App{
  3. var factor =3
  4. val multiplier =(i:Int)=> i * factor
  5. println("multiplier(1) value = "+ multiplier(1))
  6. println("multiplier(2) value = "+ multiplier(2))
  7. }
六 匿名函式例項multiplier(1) value = 3multiplier(2) value = 6