6.5.2 c# 中的函式組合
c# 中的函式組合是可能的,但使用非常有限,這是部分是由於在 c# 中散應用不能很容易使用,但更重要的是,因為大多數操作是用成員來寫的,而不是函式。但我們至少可以用 c# 演示同樣的想法,清單 6.18 顯示了 compose 方法的實現,以及使用的示例。
清單 6.18實現並使用 compose 方法 (c#)
static funccompose(this funcf, funcg) ;
var sqrs =data.select(square.compose(formatnum)); [3]
// prints: "1.210000e+000";"4.840000e+000"; "1.089000e+001"
foreach (var s in sqrs) console.write(s);
函式組合被實現為 func 委託的擴充套件方法,因此,我們可以使用點表示法在函式值上呼叫,只傳遞乙個引數值;在 f# 中,這被寫成有三個引數的函式,雖然,通常只用到兩個引數值;在 c# 中,我們必須將它實現作為有兩個引數值的方法,顯式返回 func 委託。我們構建 lambda 函式,有乙個引數值,呼叫將要組合的函式[1],並返回該函式作為委託。
為了測試這個方法,我們建立了兩個想要組合的函式[2],在用 select 處理集合中的數字時,使用組合函式。我們沒有顯式指定 lambda 函式作為引數值,而是呼叫 compose 建立組合函式值,把它傳遞給 select 方法[3]。
在最後幾節中,我們已經知道,很多有用的處理函式都是泛型,其中有些甚至有三個型別引數。在 f# 中,寫這樣的函式很容易,因為,我們不必顯式寫出型別,因為型別推斷已經自動推斷出型別。因此,現在要近距離了解這種機制是如何工作的。
c 中建構函式,複製建構函式,組合類的說明
c 中建構函式的種類很多 預設建構函式,無參建構函式,過載建構函式,複製建構函式 拷貝建構函式 型別轉換建構函式,符號過載建構函式。一般在用類定義物件時候,如果類中無顯示的定義建構函式,那麼就呼叫系統都預設建構函式 無參建構函式 無參建構函式一般指顯示定義了建構函式,但是建構函式沒有傳參,一般只為成...
陣列 指標 函式 結構的組合
定義乙個結構體 typedef struct studentstudent 結構陣列 student st n 該陣列st中有n個student,每個student都有相應的num name score.如 st 0 num表示第乙個學生的學號結構指標 student st student st s...
C 中類的組合與建構函式
首先看看建構函式的概念。在程式執行過程中,當遇到物件宣告語句時,程式會想作業系統申請一定的記憶體空間用於存放新建的物件。而編譯器不知道如何產生 來實現初始化。所以c 做了一套物件初始化的機制,就是建構函式。然後是類的組合中,當建立類的物件時,如果這個類具有內嵌物件成員,那麼各個內嵌物件將首先被自動建...