前言 :
Scala 是一個可直譯、編譯、靜態、運行於 JVM 之上、可與 Java 互操作、融合物件導向編程特性與函式編程風格的程式語言. Scala 本身具有擴充性,不過這必須了解更多語法特性與細節.
部份套用函式(Partially applied function) :
所謂的部份套用,是指對某個已定義的函式,希望先對某些參數套用指定的值,之後需要時再指定剩下未定參數的值, 例如 :
原先的 sumOfCubes 函式定義了三個參數,現在假設你希望其中兩個參數預定為 3、2,方便接下來的程式只需呼叫一個參數的版本,則可以使用範例中的方 式,先套用部份參數,而未套用的部份使用佔位字元與型態宣告保留下來,這樣的語法會傳回一個函式物件,型態為(Double) => Double,你將之指定給 sumOfCubes32 參考,之後就可以只指定未套用參數的值. 部份套用函式的語法會傳回函式物件,實際上所產生的函式 物件其類別來源,是由編譯器自動產生,這個自動產生的類別,會有個 apply 方法,正如 Scala 語法的一致性,如果要呼叫某個 apply 方法,可以只使 用括號,所以 sumOfCubes32(4),其實是轉為呼叫 sumOfCubes32.apply(4)。以下是另一個範例,用以證明方才的說法 :
如果你想要 :
- val s = sumOfCubes(_: Double , _: Double, _: Double)
- val s = sumOfCubes _
- import scala.Math._
- val sumOfCubes=(a: Double, b: Double, c: Double) => pow(a, 3)+pow(b, 3)+pow(c, 3)
- Array(1, 2, 3).foreach(x => println(x))
- Array(1, 2, 3).foreach(println(_))
- Array(1, 2, 3).foreach(println _) // 相當於 .foreach(x => println(x))
- Array(1, 2, 3).foreach(println)
則會出現以下的錯誤訊息 :
沒有留言:
張貼留言