You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:24:00