2014年4月6日 星期日

scala 中對於不接受參數的函數定義方式與使用方法

    scala 對於不接受參數的函數定義方式有兩種。如下面程式碼所示。

def test1 = { // 1. without ()
  println("SS")
}

def test2() = { //2. with ()
  println("GG")
}


test1()

    第一種寫法,沒有 () 。使用時,不可以加上 () 否則會出錯。因此呼叫時只有一種寫法,test1。

    第二種寫法,有 () 。使用時,可以加上 (),也可以不要加上 () 。因此呼叫時有兩種寫法, test2 或 test2()。




   如果要把 function 當成變數在傳遞時,
   第一種寫法,只能寫成 val a = test1 _ 。
   第二種寫法,可以寫成 val a = test2 _ 或是 val a: () => Unit = test2


   假設現在有一個變數定義為 val a = test2 _ 。
   那麼 val b = a 的意思為 b 和 a 的型別一樣,內容指向 test2
   而 val b = a() 的意思為執行 test2() ,並將回傳值放在變數 b
   這裡出現了一個很奇怪的現象,test2 沒加 () 表示執行該 function。可是對於函數變數(如 a),你沒加 () 表示你沒有要執行該 function。


  對於不接受參數的函數定義,建議使用第一種寫法(沒加上 ()) 以免產生渾亂。 scala api 對於不接受參數的函數定義都以不加上 () 為主。


沒有留言:

張貼留言