Сокращение матча OCaml - PullRequest
       29

Сокращение матча OCaml

0 голосов
/ 08 октября 2018

Когда я впервые посмотрел на использование ключевого слова 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"

Первая функция имеет подпись val eval1 : e -> bytes = <fun>

Вторая функция имеет подпись val eval2 : 'a -> e -> bytes = <fun>

1 Ответ

0 голосов
/ 08 октября 2018

В eval2, используя function, сопоставляемый аргумент является неявным.exp здесь не используется, и должно выдать вам предупреждение компилятора (если вы не выключили его).Если вы удалите аргумент exp, подписи должны быть идентичны.

Или, другими словами, function ... не является синтаксическим сахаром только для match exp with ..., но для fun exp -> match exp with ...

...