6 1 1 寫 F 中的泛型函式

2021-08-25 20:15:14 字數 914 閱讀 8711

6.1.1 寫 f# 中的泛型函式

在第 5 章,我們看到了乙個簡單的泛型函式,它只使用單個引數值,是乙個泛型選項型別。清單 6.1 顯示 condprint 方法的 f# 實現,來自"在函式式程式設計和物件導向中的泛型**"側邊欄。它有三個引數值:乙個值、乙個函式,用於 測試是否應列印這個值,還有乙個函式,用於設定格式化這個值。

listing 6.1 generic function condprint (f# interactive)

> let condprint value test format =

if (test(value)) then printfn "%s" (format(value))

;; val condprint : 'a -> ('a -> bool) -> ('a -> string) –> unit

> condprint 10 (fun n -> n > 5)

(fun n -> "number: " + n.tostring());;

number: 10

我們使用 let 繫結,宣告了乙個函式,有三個引數,不需要指定任何引數型別。這是因為 f# 型別推斷也適合函式。稍後我們會看到它可以多麼複雜。現在,我們可以說它自動推斷了這個函式的型別簽名,它對應於我們前面在 c# 中的泛型方法。

注意在第 4 章,我們討論了傳遞多個輸入給函式,哪一種更好,是作為單獨的引數值(例如,add 2 3) ,還是元組(例如 add(2, 3))。在寫高階函式時,我們將使用第一種樣式,因為,這更容易使用 lambda 函式作為引數值。它還支援流運算子,我們很快就會介紹它,以及其他的函式技術,像偏函式應用。

在 f# 中,表示泛型函式的另一種方法,是寫自定義運算子。以後,我們會想要使用這些,現在,讓我們簡要地看一下,也介紹一下流運算子(pipelining operator),來自 f# 庫的特別有用的運算子。

5 4 4 寫泛型函式

5.4.4 寫泛型函式 大多數使用泛型型別的函式或方法都是高階的,意味著它們取另乙個函式作為引數值。這是乙個重要的主題,我們會專門用一整章 第 6 章 來討論,但我們已經可以寫乙個泛函式,而不用誤入高階領域。我們將建立乙個函式,它取乙個選項型別,並返回包含的值。如果這個選項型別不包含乙個值,該函式將...

函式的過載與泛型函式

include iostream using namespace std template 泛型設計 void print elemtype pbegin,elemtype pend 函式的過載 void print int pbegin,int pend void print char pbegi...

泛型函式的安全規則

wednesday,january 05,2005 security rules with generic functions half the code,seven fewer inte ces 為了用泛型函式代替介面卡 adaptation 我僅僅重構了 peak.security 的訪問控制規...