Ce code compile très bien en F #, ainsi que OCaml:Pourquoi cette expression F #/OCaml "match" compile-t-elle?
let testmatch k =
match k with
| jqk3jtl23jtlk123 -> true
Je l'ai testé dans les deux FSI et utop. Il renvoie toujours true
.
Le jqk3jtl23jtlk123
est totalement aléatoire, et son type est inféré comme 'a
. Même si je contrains k
avec un type de données (par exemple let testmatch (k: int) =
) il compile (bien que quelqu'un évidemment contraignant type de » testmatch
-int -> bool
au lieu de 'a -> bool
Pourriez s'il vous plaît expliquer ce qui se passe précisément.?
- Pourquoi est-ce le compilateur accepte un littéral
jqk3jtl23jtlk123
totalement aléatoire? - pourquoi je ne reçois un avertissement match inexhaustive?
- ce qui est le match en train de faire ?
Vous n'êtes pas correspondant à la valeur 'jqk3jtl23jtlk123', vous créez une valeur nommée' jqk3jtl23jtlk123' qui correspond à ce 'K' est. – Marth
Dans ces langues, vous êtes généralement dans une expression de valeur ou une expression de correspondance de modèle, et ces deux comportements se comportent différemment. La correspondance de modèle se produit après 'match ... with', après' function', et dans n'importe quel paramètre de fonction/méthode. – TheQuickBrownFox