我正在关注this OCaml教程。
他们提供了以下两个功能,并表示它们是等效的。
let string_of_int x = match x with
| 0 -> "zero"
| 1 -> "one"
| 2 -> "two"
| _ -> "many"
let string_of_int2 = function
| 0 -> "zero"
| 1 -> "one"
| 2 -> "two"
| _ -> "many"
我的查询是关于上述函数的语法。
我写了相同的函数,但我只是| 0 ->
而不是0 ->
,函数仍然以相同的方式工作。教程是否有任何特殊原因在其功能中添加了额外的|
?
在第二个函数中,function
关键字的用途是什么?为什么第一个函数中没有此关键字?
答案 0 :(得分:3)
有些人认为它看起来更漂亮,更有条理,它允许您使用cut& amp;更改案例的顺序。粘贴而不必担心哪一个没有|
。
function
语法是缩写:function [CASES]
与fun x -> match x with [CASES]
相同。有一个微妙的区别,即function
,不可能通过参数的名称遮蔽另一个变量。
let string_of_int x = [EXP]
本身就是let string_of_int = fun x -> [EXP]
的缩写。
所以,近似地,"规范"语法使用fun
和match
,其他一切都是糖。如果将这两个扩展应用于函数的两个版本,您将看到相同的代码结果(模数字等效,当然:))。