2009-09-26 11 views
5

Ich habe das folgende Konstrukt an verschiedenen Orten in Ocaml Projekt Ich lese den Code von.Hat "match ... true -> foo | false -> bar" eine besondere Bedeutung in Ocaml?

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

Auf den ersten Blick wirkt es wie üblich if Aussage. Auf den zweiten Blick funktioniert es wie gewohnt if Aussage! Auf den dritten Blick habe ich beschlossen, bei SO zu fragen. Hat dieses Konstrukt eine besondere Bedeutung oder einen subtilen Unterschied von if Aussage, die in besonderen Fällen zählt?

Antwort

11

Ja, es ist eine if-Anweisung.

Oft match Fälle sind häufiger in OCaml-Code als if, so kann es für die Einheitlichkeit verwendet werden.

+2

ich bin damit einverstanden, aber ich würde es anders auszudrücken: ich denke, die Programmierung in ML macht Sie Muster sehen nach einer Weile überall passen , so dass du zuerst "match x with" schreibst und danach denkst. –

+2

Nicht nur ist es äquivalent zu einer if-Anweisung, es ist sehr wahrscheinlich, dass alle if-Anweisungen auf diese Weise vom Compiler entzuckert werden. –

2

Ich stimme der vorherigen Antwort nicht zu, es tut die Arbeit einer if-Anweisung, aber es ist flexibler als das.

„Pattern-Matching eine switch-Anweisung ist aber 10-mal leistungsstärker“ jemand erklärte

in diesem Tutorial einen Blick Weg erklärt Muster Link here

passend zu verwenden, auch wenn Ocaml Musterabgleich verwendet, ist die Art und Weise , damit Sie komponierten Daten Einfältigen brechen eine Liste, Tupel, zB und vieles mehr

> 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

Vielen Dank für nützliche Beispiele und eine gute Erinnerung für diejenigen, die OCaml lernen. Meine Frage war jedoch nicht die Verwendung von 'match' im Allgemeinen, sondern eine spezielle Verwendung davon, wenn ein boolescher Wert nur mit' true' und 'false' verglichen wird. In solchen Fällen arbeitet es tatsächlich als "if" -Operator. Davids Antwort und nachfolgende Kommentare erklären dies. –

Verwandte Themen