我在阅读代码的整个 Ocaml 项目的各个地方都遇到了以下构造。
match something with
true -> foo
| false -> bar
乍一看,它就像通常的if
声明一样工作。乍一看,它.. 像往常一样工作if
!乍一看,我决定问 SO。if
这个结构与特殊情况下重要的陈述是否有特殊含义或细微差别?
我在阅读代码的整个 Ocaml 项目的各个地方都遇到了以下构造。
match something with
true -> foo
| false -> bar
乍一看,它就像通常的if
声明一样工作。乍一看,它.. 像往常一样工作if
!乍一看,我决定问 SO。if
这个结构与特殊情况下重要的陈述是否有特殊含义或细微差别?
是的,这是一个 if 语句。
通常match
情况下 OCaml 代码中的情况比 更常见if
,因此它可以用于统一性。
我不同意前面的答案,它可以完成 if 语句的工作,但它比这更灵活。
“模式匹配是一个 switch 语句,但功能强大 10 倍”有人说
看看这个教程,解释使用模式匹配的方法链接在这里
此外,当使用 OCAML 模式匹配时,您可以将组合数据分解为简单数据,例如列表、元组等等
> Let imply v =
match v with
| True, x -> x
| False, _ -> true;;
> Let head = function
| [] -> 42
| H:: _ -> am;
> Let rec sum = function
| [] -> 0
| H:: l -> h + sum l;;