1 / 2
03 / 17 · Variables and Functions
标签、可选参数、管道
Base 把容易看反的参数标上 ~f、~sep。顺序可以调。
?sep 表示调用时可以不写。没写时,函数体里的 sep 是 None,不是空字符串。空字符串是你在 match 里自己决定的默认值。
xs |> f 就是 f xs。管道的优先级低,所以 xs |> List.map ~f:g 会把整个部分应用的结果再应用到 xs。
例子
utop
let concat ?sep x y =
let sep =
match sep with
| None -> ""
| Some s -> s
in
x ^ sep ^ yval concat : ?sep:string -> string -> string -> string = <fun>
concat "OCaml" "书"- : string = "OCaml书"
concat ~sep:" · " "OCaml" "书"- : string = "OCaml · 书"
let shout xs =
xs |> List.map ~f:String.uppercaseval shout : string list -> string list = <fun>
shout ["hi"; "ocaml"]- : string list = ["HI"; "OCAML"]
改一改
改完再跑
解释器覆盖书前半的核心:函数、标签参数、模式、记录、变体、ref、模块,以及简化的 Map 和 JSON。没有 GADT 细化、Async 和独立编译。
先预测,再对照
2 / 2