2009-09-26 10 views
5

Encontré el siguiente constructo en varios lugares del proyecto Ocaml, estoy leyendo el código de.¿Coincide ... verdadero -> foo | falso -> barra "tiene un significado especial en Ocaml?

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

A primera vista, funciona como de costumbre if comunicado. En un segundo vistazo, funciona ... ¡funciona como la declaración if habitual! A tercera vista, decidí preguntar en SO. ¿Este constructo tiene un significado especial o una diferencia sutil de la declaración if que importa en casos peculiares?

Respuesta

11

Sí, es una declaración if.

A menudo las cajas match son más comunes en el código OCaml que if, por lo que se pueden usar para uniformidad.

+2

Estoy de acuerdo, pero me gustaría decirlo de otra manera: Creo que la programación en ML hace ver patrones para que coincida con todo el mundo después de un tiempo , para que primero escribas "combinar x con" y comiences a pensar después de eso. –

+2

No solo es equivalente a una instrucción if, es bastante probable que todas las sentencias if sean desacralizadas de esta manera por el compilador. –

2

No estoy de acuerdo con la respuesta anterior, HACE el trabajo de una declaración if pero es más flexible que eso.

"coincidencia de patrones es una sentencia switch, pero 10 veces más potente" alguien declararon

echar un vistazo a este tutorial que explica maneras de utilizar la coincidencia de patrones Link here

Además, al utilizar ocaml coincidencia de patrones es el camino para permitir que se rompe de datos elaborada a los simples, por ejemplo, una lista, tupla y mucho más

> 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

Gracias por los ejemplos útiles y un buen recordatorio para aquellos que aprenden OCaml. Mi pregunta, sin embargo, no era sobre usar 'match' en general, sino sobre un uso particular de ella, cuando un valor booleano se compara con' true' y 'false' solamente. En tales casos, de hecho funciona como operador 'si'. La respuesta de David y los comentarios posteriores explican esto. –

Cuestiones relacionadas