Scala神奇語法2

2021-10-06 16:19:49 字數 872 閱讀 7360

今天記錄下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定義的物件不允許有...