我在Ocaml项目的各个地方遇到以下构造我正在阅读代码。“match ... true - > foo | false - > bar”在Ocaml中有特殊意义吗?
match something with
true -> foo
| false -> bar
乍一看,它像往常一样if
声明。乍一看,它就像通常的if
声明一样工作!乍一看,我决定在SO上问。这个结构是否有特殊含义或与特殊情况下重要的语句的细微差别?
我在Ocaml项目的各个地方遇到以下构造我正在阅读代码。“match ... true - > foo | false - > bar”在Ocaml中有特殊意义吗?
match something with
true -> foo
| false -> bar
乍一看,它像往常一样if
声明。乍一看,它就像通常的if
声明一样工作!乍一看,我决定在SO上问。这个结构是否有特殊含义或与特殊情况下重要的语句的细微差别?
是的,这是一个if语句。
通常match
在OCaml代码中比if
更常见,因此它可能用于统一。
我不同意以前的回答,它做的是if语句的工作,但它比这更灵活。
“模式匹配是一个switch语句,但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;;
感谢您为学习OCaml的人提供有用的示例和提醒。然而,我的问题不是关于通常使用'match',而是关于它的一个特定用法,当一个布尔值仅与“true”和“false”匹配时。在这种情况下,它确实可以作为“if”运算符。大卫的回答和随后的评论解释了这一点。 – 2009-09-28 13:01:52
我同意,但是我会换一种说法:我觉得编程ML让你看到图案,经过一段时间到处匹配,所以你先写“match x with”,然后开始思考。 – 2009-09-26 12:28:47
它不仅等同于if语句,它很可能是所有的if语句都被编译器以这种方式去除。 – 2009-09-26 19:10:17