匹配记录字段
模式匹配可用于解构记录。我们用表示文本文件中位置的记录类型来说明这一点,例如程序的源代码。
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