代码之家  ›  专栏  ›  技术社区  ›  P Shved

“match…true->foo false->bar”在ocaml中有特殊含义吗?

  •  5
  • P Shved  · 技术社区  · 15 年前

    在我阅读的OCAML项目的各个地方,我遇到了以下构造。

    match something with
      true -> foo
      | false -> bar
    

    乍一看,它像往常一样工作 if 语句。再看一眼,它……像往常一样工作 如果 声明!第三眼,我决定问一下。这个结构与 如果 特殊情况下重要的陈述?

    2 回复  |  直到 15 年前
        1
  •  11
  •   David Crawshaw    15 年前

    是的,这是一个if语句。

    经常 match 在OCAML代码中,案例比 if 因此,它可以用于均匀性。

        2
  •  2
  •   0xFF    15 年前

    我不同意前面的答案,它可以完成if语句的工作,但比这个更灵活。

    有人说:“模式匹配是一种转换语句,但功能要强大10倍。”

    请看本教程,解释如何使用模式匹配 Link here

    另外,当使用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;;