1 / 2
10 / 17 · Variants
变体:一组互斥的形状
颜色可以是命名色、RGB,或一个灰度。match 要把形状走完。
of int * int * int 是一个元组参数,不是三个参数。所以写成 RGB (r, g, b),括号属于那个元组。
书后半会提醒:通配符 _ 能让编译通过,但以后加一种颜色时,编译器就不再逼你更新每一处 match。能写全的地方就写全。
例子
utop
type basic_color =
| Black
| White
| Red
| Green
| Bluetype basic_color
type color =
| Basic of basic_color
| RGB of int * int * int
| Gray of inttype color
let to_rgb c =
match c with
| Basic Black -> (0, 0, 0)
| Basic White -> (255, 255, 255)
| Basic Red -> (255, 0, 0)
| Basic Green -> (0, 255, 0)
| Basic Blue -> (0, 0, 255)
| RGB (r, g, b) -> (r, g, b)
| Gray i -> (i, i, i)val to_rgb : color -> int * int * int = <fun>
to_rgb (Basic Red)- : int * int * int = (255, 0, 0)
to_rgb (Gray 128)- : int * int * int = (128, 128, 128)
to_rgb (RGB (12, 80, 200))- : int * int * int = (12, 80, 200)
改一改
改完再跑
解释器覆盖书前半的核心:函数、标签参数、模式、记录、变体、ref、模块,以及简化的 Map 和 JSON。没有 GADT 细化、Async 和独立编译。
先预测,再对照
2 / 2