1 / 2
09 / 17 · Records
记录与函数式更新
{ p with y = 0. } 造一条新记录,p 还是原来的 p。
字段名就是构造器的一部分。{ x; y } 是 { x = x; y = y } 的简写,模式里同样能这么拆。
magnitude 用模式把两个 float 拿出来。3. 和 -4. 的斜边是 5.。更新 y 之后,x 仍从旧记录里拷过来。
例子
utop
type point = { x : float; y : float }type point
let p = { x = 3.; y = -4. }val p : point = { x = 3.; y = -4. }let magnitude { x; y } =
Float.sqrt (x *. x +. y *. y)val magnitude : point -> float = <fun>
magnitude p- : float = 5.
let on_x = { p with y = 0. }val on_x : point = { x = 3.; y = 0. }on_x.x- : float = 3.
改一改
改完再跑
解释器覆盖书前半的核心:函数、标签参数、模式、记录、变体、ref、模块,以及简化的 Map 和 JSON。没有 GADT 细化、Async 和独立编译。
先预测,再对照
2 / 2