2009-09-26 13 views
5

Napotkałem następującą konstrukcję w różnych miejscach projektu Ocaml. Czytam kod.Czy "match ... true -> foo | false -> bar" ma szczególne znaczenie w Ocaml?

match something with 
    true -> foo 
    | false -> bar 

Na pierwszy rzut oka działa jak zwykle if oświadczenie. Na drugi rzut oka, to .. działa jak zwykle oświadczenie if! Na trzeci rzut oka postanowiłem zapytać w SO. Czy ten konstrukt ma specjalne znaczenie lub subtelną różnicę w stosunku do stwierdzenia if, które ma znaczenie w osobliwych przypadkach?

Odpowiedz

11

Tak, jest to instrukcja if.

Często zdarza się, że numery match w kodzie OCaml są większe niż if, więc mogą być używane do jednorodności.

+2

zgadzam, ale chciałbym umieścić to w inny sposób: Myślę, że programowanie w ML sprawia, że ​​można zobaczyć wzory pasujące wszędzie po jakimś czasie , więc najpierw napisz "dopasuj x z" i zacznij myśleć dalej. –

+2

Jest to nie tylko równoważne z instrukcją if, ale całkiem możliwe, że wszystkie instrukcje if zostaną w ten sposób usunięte przez kompilator. –

2

Nie zgadzam się z poprzednią odpowiedzią, działa ona w instrukcji if, ale jest bardziej elastyczna.

„pasujące do wzorca jest instrukcja switch ale 10 razy silniejsze” ktoś stwierdził

przyjrzeć się tej lekcji wyjaśniający sposoby wykorzystania Pattern Matching Link here

Ponadto, przy użyciu SML pasujące do wzorca jest droga co pozwala złamać dane składa się do prostych, na przykład listy, krotki i wiele więcej

> Let imply v = 
    match v with 
    | True, x -> x 
    | False, _ -> true;; 

    > Let head = function 
    | [] -> 42 
    | H:: _ -> am; 

    > Let rec sum = function 
    | [] -> 0 
    | H:: l -> h + sum l;; 
+0

Dziękujemy za przydatne przykłady i dobre przypomnienie dla osób, które uczą się OCaml. Moje pytanie jednak nie dotyczyło użycia 'match' w ogóle, ale o jego szczególnym zastosowaniu, gdy wartość boolowska jest dopasowywana tylko do' true' i 'false'. W takich przypadkach rzeczywiście działa jako operator "jeśli". Odpowiedź Davida i późniejsze komentarze wyjaśniają to. –

Powiązane problemy