OCaml 模式匹配一​​条语句中的记录和字段

OCaml pattern match record and fields in one statement

我想要一个匹配语句让我访问记录 它的一些字段,如下所示:

| Some n {left = Some l; right = Some r} -> dostuff...

所以在这里,我可以参考记录 (n) 及其左侧 l 和右侧 r 的字段。这可能吗?

例如我想要这样的东西

let rec remove_node root v =
  match root with
    | None   -> root
    | Some n when v > n.value -> do_a...
    | Some n when v < n.value -> do_b...
    | Some n when {left = Some l; right = Some r} -> do_c...
    | Some {right = Some r} -> do_d...
    | Some {left} -> do_e...

但是我现在正在写这个:

let rec remove_node root v =
  match root with
    | None   -> root
    | Some n ->
      (match n with
      | _ when v > n.value  -> do_a...
      | _ when v < n.value  -> do_b...
      | {left = Some l; right = Some r} -> do_c...
      | {right = Some r}    -> do_d...
      | {left}              -> do_e...
      )

还不错,但我想尽可能避免嵌套匹配。

正如 Lee 在上面的评论中指出的那样,解决方案是在括号中使用 as,如下所示:

let rec remove_node root v =
  match root with
    | Some ({left = Some l; right = Some r} as n) -> dostuff...

(@Lee,如果你想回答,那么我可以给你点赞,我会删除这个并投票给你的答案。)