OCaml中的|符号代表什么含义?有哪些常见使用场景?
OCaml 中
| 符号的含义与常见使用场景 | 在OCaml中核心作用是分隔多个互斥的可选分支,不同场景下的具体用法如下:
1. 模式匹配分支分隔
这是你给出的示例中的用法,无论是match ... with表达式还是function语法糖,都用|分隔每个匹配条件分支,OCaml会从上到下依次匹配,命中第一个符合条件的分支后就执行对应逻辑,不会继续向下匹配。
你给出的示例等价于完整的match写法:
fun pair -> match pair with | (0, 0) -> "both zero" | (0, _) -> "first only zero" | (_, 0) -> "second only zero" | (_, _) -> "neither zero"
2. 变体类型定义分隔
定义自定义变体类型时,用|分隔不同的变体构造器,标记该类型的所有可能取值:
type shape = | Circle of float (* 圆,参数为半径 *) | Rectangle of float * float (* 矩形,参数为宽、高 *) | Square of float (* 正方形,参数为边长 *)
3. 异常捕获分支分隔
try ... with异常捕获表达式中,用|分隔不同的异常处理分支,对应不同异常的处理逻辑:
try let res = 10 / 0 in print_int res with | Division_by_zero -> print_endline "除零错误" | e -> print_endline ("其他错误:" ^ Printexc.to_string e)
4. 或模式(Or-pattern)逻辑
OCaml 4.03及以上版本支持或模式,可以在同一个匹配分支内用|连接多个模式,只要命中其中任意一个模式就算当前分支匹配成功:
let is_zero_or_one = function | 0 | 1 -> true | _ -> false
5. 多态变体的定义与匹配
多态变体(以反引号开头的特殊变体类型)的定义、模式匹配过程中,同样用|分隔不同的分支:
let extract_num = function | `Int n -> n | `Float f -> int_of_float f
内容的提问来源于stack exchange,提问作者Shisui
相关产品推荐
相关产品推荐

