2010-02-19 5 views
3

Je suis intrigué par la façon dont la correspondance de modèle fonctionne en F # pour let. J'utilise la fenêtre interactive de F Studio, F # version 1.9.7.8. Disons que nous définissons un type simple:F # motif correspondant

type Point = Point of int * int ;; 

et essayer de faire correspondre modèle par rapport aux valeurs de Point en utilisant let.

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

échoue avec error FS0039: The value or constructor 'x' is not defined. Comment est-on censé utiliser la correspondance de modèle avec let?

La chose la plus curieuse est que:

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

retourne 1 comme prévu. Pourquoi?

Répondre

10

Vous devez mettre entre parenthèses autour de votre modèle:

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

Sinon, il n'y a aucun moyen de distinguer le modèle d'une fonction de liaison ...

Questions connexes