1. 程式人生 > >Scala函式和匿名函式

Scala函式和匿名函式

一 函式是第一等公民

1、把函式作為實參傳遞給另外一個函式。 2、把函式作為返回值。 3、把函式賦值給變數。 4、把函式儲存在資料結構裡。 在Scala中,函式就像普通變數一樣,同樣也具有函式的型別。 二 函式型別 1、定義 在Scala語言中,函式型別的格式為A =>B,表示一個接受型別A的引數,並返回型別B的函式。 例子:Int => String 是把整型對映為字串的函式型別 2、程式碼
  1. package test_first
  2. object DemoextendsApp{
  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] 8 hello cakin24 500.0 三 高階函式 1、定義 用函式作為形參或返回值的函式,稱為高階函式。 def operate(f:(Int,Int)=>Int)={f(4,4)} def greeting() =(name:String) =>{"hello" + " " + name} 2、程式碼
  1. package test_first
  2. object DemoextendsApp
    {
  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)-1 2、匿名函式中定義多個引數: var mul = (x: Int, y: Int) => x*y mul 現在可作為一個函式,使用方式如下: println(mul(3, 4)) 3、不給匿名函式設定引數,如下所示: var userDir = () => { System.getProperty("user.dir") } userDir 現在可作為一個函式,使用方式如下: println( userDir() ) 五 匿名函式例項
  1. package test_first
  2. object DemoextendsApp{
  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 = 3 multiplier(2) value = 6