Ten kod kompiluje dobrze w F # oraz SML:Dlaczego to wyrażenie "dopasuj" F #/OCaml?
let testmatch k =
match k with
| jqk3jtl23jtlk123 -> true
Przetestowałem zarówno FSI i Utop. Zawsze zwraca true
.
Numer jqk3jtl23jtlk123
jest całkowicie losowy, a jego typ jest interpretowany jako 'a
. Nawet jeśli ograniczyć k
z typów danych (np let testmatch (k: int) =
) kompiluje (choć oczywiście ograniczać testmatch
„s typ do int -> bool
zamiast 'a -> bool
Czy ktoś mógłby wyjaśnić, co się dzieje szczególności:.?
- dlaczego kompilator przyjąć całkowicie losowy dosłowne
jqk3jtl23jtlk123
? - dlaczego nie dostać inexhaustive ostrzeżenie meczu?
- co jest mecz rzeczywiście robi?
Nie jesteś dopasowywania wartości 'jqk3jtl23jtlk123', jesteś tworząc wartość o nazwie' jqk3jtl23jtlk123' pasujący cokolwiek 'k' jest. – Marth
W tych językach zazwyczaj znajdujesz się w wyrażeniu wartości lub wyrażeniu dopasowującym do wzorca, a te dwa zachowują się w różny sposób. Dopasowywanie wzorców zachodzi po 'match ... with', after' function' oraz w dowolnych parametrach funkcji/metody. – TheQuickBrownFox