OCaml匹配速记

tim*_*mbo 0 syntax ocaml pattern-matching

当我第一次看到function在OCaml中使用关键字时,我得到的印象是,消除match x with模式匹配的行是语法糖.

但是,我发现两者之间存在签名差异,如下例所示.在什么情况下你想使用这个function例子?

type e = Foo | Bar

let eval1 exp =
match exp with
| Foo -> "Foo"
| Bar -> "Bar"

let eval2 exp = function
| Foo -> "Foo"
| Bar -> "Bar"
Run Code Online (Sandbox Code Playgroud)

第一个函数有一个签名 val eval1 : e -> bytes = <fun>

第二个函数有一个签名 val eval2 : 'a -> e -> bytes = <fun>

gle*_*nsl 7

eval2使用中function,匹配的参数是隐式的.exp这里没有使用,应该给你一个编译器警告(除非你把它关闭).如果删除exp参数,则签名应该相同.

换句话说,function ...不仅仅是语法糖match exp with ...,而是forfun exp -> match exp with ...