7 1 1 1 處理記錄

2021-06-27 05:14:45 字數 1006 閱讀 3730

7.1.1.1 處理記錄

我們在本章後面還要用到rect 型別,有兩個簡單的函式來處理矩形。第乙個函式是縮小矩形,通過從每一條邊上減去指定的寬度和高度,第二個函式是把我們的矩形表示形式轉換成 system.drawing 命名空間中的 rectanglef 類。清單 7.2 中是這兩個函式。

清單 7.2 處理矩形的函式 (f# interactive)

> open system.drawing;;

> let deflate(original, wspace, hspace)=

;; |

val deflate : rect * float32 *float32 –> rect    [1]

> let torectanglef(original) =

rectanglef(original.left,original.top,      | 返回rectanglef 類的例項

original.width, original.height);;  |

val torectanglef : rect –>rectanglef    [2]

> ;;

val it : rectangle = (...)

> deflate(it, 20.0f, 10.0f);;      [3]

val it : rectangle =

從型別簽名[1][2]可以發現,f# 編譯器正確推斷引數 original 的型別是 rect。在函式體中,編譯器使用欄位名進行訪問,如果我們有兩個記錄型別,並且有些欄位名是相同的,那麼,就必須顯式指定其型別。我們可以使用型別批註,在函式宣告中寫上  (original:rect)。通常,當使用 f# interactive 時,可以立即測試函式[3]。當建立值時,我們沒有使用let 繫結,而是在後面使用自動建立的 it 值來訪問的。

總結一下,f# 的記錄是不可變的,可以使用 構造方便地進行複製。在 c# 中,如果我們像這樣設計資料結構,可能要使用類,偶爾會用到結構,但肯定要用特殊的方法。在下一節,我們將介紹如何實現。

6 3 處理計畫

6.3 處理計畫 在本節,我們要把上一節的技術應用到可選值。在處理元組時,我們發現使用函式,有助於處理元組中的元素 類似地,處理可選值時,同樣需要使用高階函式,對可選值中的乙個或多個進行某種操作。我們接著上一章的示例,從計畫型別開始,然後,看一下選項型別。在前面的章節中,我們實施了乙個表示事件計畫的...

(9)處理型別

型別別名 是乙個名字,它是某種型別的同義詞。c 有兩種方法用於定義型別別名 一.使用關鍵字typedef typedef int iname iname a 1 可用iname定義變數 a是乙個整型變數二.使用別名宣告 using 來定義型別的別名 using iname int iname a 1...

6 3 處理計畫

6.3 處理計畫 在本節中,我們將把上一節的技術應用到可選為值。在處理元組時,我們發現寫函式,有助於處理元組中的乙個元素。同樣,處理可選值時,需要高階函式,在乙個或多個可選值上執行某種操作。我們接著上一章的示例,我們從計畫型別開始,然後,看一下選項型別。在前面的章節中,我們實施了乙個型別,表示事件的...