2009-09-26 8 views
5

Ho incontrato il seguente costrutto in vari punti del progetto Ocaml di cui sto leggendo il codice."match ... true -> foo | false -> bar" ha un significato speciale in Ocaml?

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

A prima vista, funziona come al solito if dichiarazione. A seconda vista, funziona come la solita dichiarazione if! A terza vista, ho deciso di chiedere a SO. Questo costrutto ha un significato speciale o una sottile differenza dalla dichiarazione if che interessa in casi particolari?

risposta

11

Sì, è un'istruzione if.

Spesso i casi match sono più comuni nel codice OCaml rispetto a if, pertanto è possibile utilizzarlo per uniformità.

+2

sono d'accordo, ma vorrei mettere in un altro modo: credo che la programmazione in ML ti fa vedere i modelli per abbinare ovunque dopo un po ' , così scrivi prima "match x with" e inizia a pensare dopo. –

+2

Non solo è equivalente a un'istruzione if, è piuttosto probabile che tutte le istruzioni vengano desugared in questo modo dal compilatore. –

2

Non sono d'accordo con la risposta precedente, FA il lavoro di un'istruzione if, ma è più flessibile di quello.

"pattern matching è un'istruzione switch, ma 10 volte più potente" qualcuno ha dichiarato

un'occhiata a questo tutorial che spiega il modo di utilizzare pattern matching Link here

Inoltre, quando si utilizza il pattern matching OCAML è il modo per consentire di rompere i dati composte da quelli semplici, ad esempio un elenco, tuple e molto altro

> 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

Grazie per gli utili esempi e un buon promemoria per coloro che imparano OCaml. La mia domanda, tuttavia, non consisteva nell'usare 'match' in generale, ma riguardo un uso particolare di esso, quando un valore booleano viene confrontato solo con' true' e 'false'. In questi casi funziona davvero come operatore "if". La risposta di David e i commenti successivi lo spiegano. –

Problemi correlati