F # сопоставление с образцом - PullRequest
3 голосов
/ 19 февраля 2010

Я озадачен тем, как сопоставление с образцом работает в F # для let. Я использую интерактивное окно Visual Studio F #, F # версия 1.9.7.8. Допустим, мы определили простой тип:

type Point = Point of int * int ;;

и попытка сопоставить шаблон со значениями Point, используя let.

let Point(x, y) = Point(1, 2) in x ;;

терпит неудачу с error FS0039: The value or constructor 'x' is not defined. Как можно использовать сопоставление с шаблоном с let?

Самое любопытное, что:

let Point(x, y) as z = Point(1, 2) in x ;;

возвращает 1, как и ожидалось. Почему?

1 Ответ

10 голосов
/ 19 февраля 2010

Вы должны поставить круглые скобки вокруг вашего шаблона:

let (Point(x, y)) = Point(1, 2) in x ;;

В противном случае нет способа отличить шаблон от привязки функции ...

...