2011-01-01 16 views
12

Duplicar posible:
F# explicit match vs function syntax¿Cuándo usar 'función' en lugar de 'diversión'?

Hola,

estoy aprendiendo C# y estoy confundido por 'diversión' y las palabras clave 'función'. Mi entendimiento es que estas son una especie de la misma cosa.

// Use 'fun' 
let testFunction1 = fun argument -> match argument with 
            | Some(x) -> x 
            | None -> 0 

// Use 'function' 
let testFunction2 = function 
        | Some(x) -> x 
        | None -> 0 

¿Es 'función' solo abreviatura de "diversión x -> coincide con x con"? ¿Hay alguna diferencia de tiempo de ejecución/optimización entre los dos? ¿Por qué preferiría usar uno sobre el otro?

Tal como está, la 'función' parece hacer que el código sea más difícil de leer. ¿Me estoy perdiendo de algo?

+6

Si se ve divertido, no use la función; mata la diversión. – Mehrdad

+0

Duplicado http://stackoverflow.com/questions/1839016/f-explicit-match-vs-function-syntax – Dykam

+0

¡Perdón por la pregunta de engañar! No vi el otro. –

Respuesta

1

Es simplemente azúcar sintáctica. Al igual que en C# c => c = 'A' es la sintaxis de azúcar para delegate (char c) { return c = 'A'; }. Todo se reduce a las preferencias personales realmente.

9

función sólo permite un argumento, pero permite la coincidencia de patrones, mientras que diversión es la forma más general y flexible para definir una función. Eche un vistazo aquí: http://caml.inria.fr/pub/docs/manual-ocaml/expr.html

+3

Por otro lado, puede tener varias cláusulas separadas por '|' cuando usa 'function'. La función –

+0

permite la coincidencia de patrones, pero solo en el último argumento * – symbiont

Cuestiones relacionadas