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>
在eval2使用中function,匹配的参数是隐式的.exp这里没有使用,应该给你一个编译器警告(除非你把它关闭).如果删除exp参数,则签名应该相同.
换句话说,function ...不仅仅是语法糖match exp with ...,而是forfun exp -> match exp with ...