我需要表示一组元素...由于这些元素之间存在顺序关系,因此我决定使用格子(而不是列表或地图...)来表示它们,其中函数included
用于检查命令。
每个元素都有几个代表它们的属性的属性。
1)的实现很正常,如下:
module m = struct
type t =
| C0 | C1 | C2 ...
let get_att0 (x: t) : string =
| C0-> "C0"
| C0-> "C1"
| C0-> "C2"
let get_att1 (x: t) : int =
| C0-> 1
| C0-> 2
| C0-> 3
let get_att2 (x: t) : bool =
| C0-> true
| C0-> false
| C0-> true
let included (x0: t) (x1: t) : bool =
...
end
2) 实现使用内部类型record
:
module m = struct
type t =
| C0 | C1 | C2 ...
type record =
{ att0: string; att1: int; att2: bool ... }
let get_record (x: t) : record =
| C0 -> { att0 = "C0"; att1 = 1; att2 = true ... }
| C1 -> { att0 = "C1"; att1 = 2; att2 = false ... }
| C2 -> { att0 = "C2"; att1 = 3; att2 = true ... }
let get_att0 (x: t) : string =
(get_record x).att0
let get_att1 (x: t) : int =
(get_record x).att1
let get_att2 (x: t) : bool =
(get_record x).att2
let included (x0: t) (x1: t) : bool =
...
end
谁能告诉我哪种实现更传统,在实践中更有效?