軌道
/
F#
F#
/
課程大綱
/
差別聯合
差別

差別聯合 在 F#

15 個練習

關於 差別聯合

判別聯集型別代表固定數量的具名案例。判別聯集的每個值都恰好對應其中一個具名案例。這類資料型態稱為_和型別_。

判別聯集的每個案例可以選擇性地帶有關聯資料,而且不同的案例可以帶有不同型態的資料。如果所有案例都沒有關聯資料,這個判別聯集就類似其他語言通常所稱的_列舉_(或 enum)。

判別聯集使用type關鍵字定義,而且語法非常精簡。這讓它們易於使用,你會在很多地方看到它們,包括基底程式庫。

// Discriminated union without associated data
type Season =
    | Spring
    | Summer
    | Autumn
    | Winter

// Discriminated union with associated data
type Number =
    | Integer of int
    | Float of float
    | Invalid

要為特定案例建立值,可以參照它的名稱;如果名稱不唯一,就使用完整名稱。由於案例名稱就是建構函式,關聯資料可以像一般的函式引數一樣傳入。

let byName = Integer 2
let byFullName = Number.Invalid

判別聯集具有_結構相等性_,意思是同一個案例、且帶有相同(選用)資料的兩個值會相等。

處理判別聯集的首選方式是透過模式比對,使用識別碼模式:

let describe number =
    match number with
    | Integer i -> sprintf "Integer: %d" i
    | Float d  -> sprintf "Float: %f" d
    | Invalid   -> "Invalid"
透過 GitHub 編輯 連結會在新視窗或分頁中開啟

學習 差別聯合

練習已鎖定

再解鎖 10 個練習,就能練習 差別聯合