2011-11-27 18 views
9

Acabo de empezar a aprender F #.F #. Tuple o no

Me pregunto cómo puedo determinar si el argumento de una función es una tupla?

let tuple = (1, 2) 
let notTuple = 3 

let isTuple t = // returns 'true' if t is a tuple, 'false' otherwise 

printfn "%b" isTuple tuple  // true 
printfn "%b" isTuple notTuple // false 

Respuesta

11

Probablemente, técnicamente, una manera de hacer esto, ya que es compatible con CLR controles de tipo en tiempo de ejecución. Pero no debe querer para hacerlo. Va en contra de la filosofía del polimorfismo de la familia ML: si necesita dicha verificación, indica que el diseño de su algoritmo y/o estructura de datos no es adecuado para el lenguaje de programación. (La excepción es si necesita interactuar con bibliotecas .net existentes que no sigan esta filosofía).

Más específicamente, el polimorfismo paramétrico se basa en el concepto de que cada vez que tenga algo que usted no sabe ya qué tipo es, es porque quiere manejar todo de igual manera y no mirar dentro de los datos para ver lo que es. No seguir esta regla equivale a trabajar a contrapelo del lenguaje de programación, y hará que su código sea más difícil de entender, porque los tipos no llevarán la información habitual sobre cómo sus funciones tratan los datos.

Si desea crear un código que se puede pasar ya sea una tupla o un solo número, y tienen ese código sea consciente de la diferencia, se debe definir una explícita tipo de variante de tal manera que se puede decir de las posibilidades aparte usando la coincidencia de patrones, y será explícito en los tipos de funciones que brinden a la persona que llama esa elección.