因此,我对 OCaml 完全陌生,并且在实现第一个功能方面进展相当缓慢。我无法理解的一件事是何时使用模式匹配功能,例如
let foo =
[] -> true
| _ -> false;;
与使用 if else 结构类似
let foo a =
if a = [] then true else false;;
我应该什么时候使用它们?
我认为这个问题没有明确的答案。首先,模式匹配的明显情况是当您需要破坏时,例如:
let rec sum = function
| [] -> 0
| head :: tail -> head + sum tail;;
另一个明显的情况是,当您定义递归函数时,模式匹配使边缘条件更清晰,例如:
let rec factorial = function
| 0 -> 1
| n -> n * factorial(n - 1);;
代替:
let rec factorial = function n ->
if n = 0 then
1
else
n * factorial(n-1);;
这可能不是一个很好的例子,只需发挥你的想象力来找出更复杂的边缘条件! ;-)
就常规(比如 C)语言而言,我可以说你应该使用模式匹配而不是switch
/case
and if
代替三元运算符。对于其他一切来说,这都是一个灰色地带,但模式匹配在 ML 语言家族中通常是首选。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)