回

14 / 17 · Maps and Hash Tables

Map 记住比较方式

树形 Map 要知道键怎么排序。这个信息待在类型里。

Base 的 Map 不是一个全局的 Map.t。你先有一个比较器,Make 或带 comparator witness 的接口会把「怎么比」写进类型。这样 set 和 find 不会拿两种排序去操作同一棵树。

书桌里的 Map 是教学用的简化版:键用结构相等,没有真正的 comparator witness。行为够用来练 set / find,类型旁注才是这一课要记住的。find 返回 option。

例子

utop
let m = Map.empty
val m : ('k, 'v) map = (empty)
let m = Map.set m ~key:"ocaml" ~data:1996
let m = Map.set m ~key:"base" ~data:2018
Map.find m "ocaml"
- : int option = Some 1996
Map.find m "rust"
- : 'a option = None

改一改

改完再跑

解释器覆盖书前半的核心:函数、标签参数、模式、记录、变体、ref、模块,以及简化的 Map 和 JSON。没有 GADT 细化、Async 和独立编译。

先预测,再对照

1 / 2

Map.find m "rust" 在这个例子里是?

2 / 2

comparator witness 要解决的问题是?