今天記錄下scala的柯里化語法
柯里化(currying)是指將原先接受多個引數的函式 多個乙個引數的多引數列表的過程。
讓我們先來定義兩個函式:
// 實現對兩個數進行計算的方法
def calc[a <: anyval](x:a, y:a, func_calc:(a, a)=>a) =
// 柯里化:實現對兩個數進行計算
def calc_carried[a <: anyval](x:a, y:a)(func_calc:(a, a)=>a) =
其實博主一開始是對引數傳遞存在一些疑惑,引數中傳遞了乙個未實現的函式,讓我一開始差點想到遞迴上去了。。
然而這種語法,只是傳遞了乙個半成品的函式樣式。
讓我們看看如何呼叫:
// 這種寫法是不能被簡化的,必須要寫出函式的定義
println(calc(10, 10, (x:int, y:int)=> x + y))
println(calc(10.1, 10.2, (x:double, y:double)=> x*y))
// 柯里化之後可以快樂地使用下劃線了
println(calc_carried(10, 10)(_ + _))
println(calc_carried(10.1, 10.2)(_ * _))
println(calc_carried(100.2, 10)(_ - _))
通過模擬沒有實現柯里化的函式,我仔細揣摩之後發現,引數中傳遞的函式只表示了乙個接受兩個引數的函式,具體要實現什麼功能或運算還需要重新定義,所以才會有下面的+,/,*等操作。
今天先暫時記錄在這。如有不對之處請各位大佬斧正。
Scala基礎 2 基礎語法
val x 6 if x 0 elsevar i 9 while i 0 val x 0 do while i 5 for 變數 表示式 語句塊 for i 1 to 5 其中 變數 表示式 被稱為 生成器 generator for i 1 to 5 if i 2 0 for i 1 to 5 j...
scala基礎語法
一 變數定義 1 val 定義的變數值不可以修改 2 var 定義的變數值可以修改 二 一些變數型別 1 unit 表示不返回任何結果方法的結果型別,相當於void 2 null null 空引用 3 nothing 任何其他類的子型別 4 any 所有其他類的父類 5 anyref 所有引用類的基...
Scala基本語法
scala基本語法 object表示物件,因為scala中沒有靜態物件這一說,但是要實現單例模式該怎麼辦呢?這時就可以使用object關鍵字。如果要對某個類實現單例模式,我們可以使用object 再定義乙個同class 類名相同的物件。它和class定義的類的區別在於,object定義的物件不允許有...