什么是垂直条“|” (又名管道)在OCaml完成?

时间:2017-03-26 20:06:32

标签: ocaml

在以下函数中,它反转数组/列表:

let rec rev l =
  match l with
    [] -> []
  | h::t -> rev t @ [h];;

我们会注意到以下行之前有一个管道|

h::t -> rev t @ [h];;

我想知道是否有人能够解释这个垂直条|在OCaml中的用途,以及其他用途?谢谢。

2 个答案:

答案 0 :(得分:3)

在您的示例中,它充当多选语句的模式分隔符,类似于C语言中case语句的switch

let is_vowel c = match c with 
  'a' | 'e' | 'i' | 'o' | 'u' -> true 
| _ -> false ;; 

function is_vowel(c){
  switch(c){
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
      return true;
    default: 
      return false;
  }
}

这两段代码会生成相同的输出,但 这是相似性结束 的地方。我发现this文档非常有帮助,它更详细地说明了您可以或不可以匹配的其他内容。

管道操作员的其他用途是:

  • 枚举类型声明
    • type typ = N1 | N2 | N3
  • 联合类型声明
    • type typ = N1 of typ1 | N2 of typ2

答案 1 :(得分:-1)

它分离了模式匹配的情况。