匹配記錄欄位

模式匹配可用於解構記錄。我們用表示文字檔案中位置的記錄型別來說明這一點,例如程式的原始碼。

type location = {
  filename : string;
  line: int;
  column: int;
  offset: int;
}

可以解構型別位置的值 x,如下所示:

let { filename; line; column; offset; } = x

類似的語法可用於定義函式,例如列印位置的函式:

let print_location { filename; line; column; offset; } =
  Printf.printf "%s: %d: %d" filename line column

或者

let print_location = function { filename; line; column; offset; } ->
  Printf.printf "%s: %d: %d" filename line column

匹配記錄的模式不需要提及記錄的所有欄位。由於該函式不使用 offset 欄位,我們可以將其刪除:

let print_location { filename; line; column; } =
  Printf.printf "%s: %d: %d" filename line column

在模組中定義記錄時,足以限定模式中出現的第一個欄位:

module Location =
struct
  type t = {
      filename : string;
      line: int;
      column: int;
      offset: int;
    }
end

let print_location { Location.filename; line; column; } =
  Printf.printf "%s: %d: %d" filename line column