En Erlang, se le recomienda no hacer coincidir patrones que en realidad no maneja. Por ejemplo:Coincidencia de patrones, F # vs Erlang
case (anint rem 10) of
1 -> {ok, 10}
9 -> {ok, 25}
end;
es un estilo que se anima, con otros resultados posibles resultantes en un resultado de badmatch
. Esto es consistente con la filosofía "déjalo colapsar" en Erlang.
Por otro lado, F # emitiría una "coincidencia de patrón incompleto" en el código F # equivalente, como here.
La pregunta: ¿por qué no F # eliminar la advertencia, efectivamente aumentando cada patrón de coincidencia con una declaración equivalente a
|_ -> failwith "badmatch"
y el uso de la filosofía "deja que choque"?
Editar: Dos respuestas interesantes hasta ahora: ya sea para evitar errores que son posibles cuando no se manejan todos los casos de un tipo de datos algebraico; o debido a la plataforma .Net. Una forma de averiguar cuál es verificar OCaml. Entonces, ¿cuál es el comportamiento predeterminado en OCaml?
Editar: Para eliminar los malentendidos de personas de .Net que no tienen antecedentes en Erlang. El objetivo de la filosofía de Erlang no es producir código incorrecto que siempre falle. Let it crash means let some other process fix the error. En lugar de escribir la función para que pueda manejar todos los casos posibles, permita que la persona que llama (por ejemplo) maneje los casos incorrectos que se lanzan automáticamente. Para aquellos con antecedentes Java, es como la diferencia entre tener un lenguaje con excepciones comprobadas que debe declarar todo lo que posiblemente devolverá con cada excepción posible, y tener un lenguaje en el cual las funciones pueden generar excepciones que no están explícitamente declaradas.
Creo que la filosofía es que su función debe manejar todo el dominio que se espera de ella, y el compilador se lo recuerda. Si la función no maneja más casos que dos, entonces debe restringir los argumentos por tipo, de lo contrario cuenta para todos ellos. Esa es mi comprensión; Estoy aprendiendo sobre esta filosofía yo mismo. – grettke
@grettke: tienes razón. Esta filosofía es exactamente lo opuesto a la filosofía de Erlang. Y mi pregunta es por qué se prefiere esta filosofía (o cuándo). Las respuestas a continuación son bastante esclarecedoras. –