2011-06-10 23 views
17

He estado buscando en Google por un tiempo ahora ... Ok, lo siento, este es patéticamente fácil, pero ¿hay un operador en F # para comparar tipos de clase, como la palabra clave 'es' Cª#? No quiero usar una declaración de partido completa o comenzar a lanzar cosas. SaludosPrueba de tipo simple en F #

Respuesta

25

Usted puede utilizar el constructo :? tanto como un patrón (en el interior match) o como un operador:

let foo = bar :? System.Random 

Esto comporta de forma ligeramente diferente que en C#, ya que el compilador sigue tratando de hacer algunas comprobaciones en tiempo de compilación -hora. Por ejemplo, es un error usar esto si el resultado sería sin duda false:

let bar = 42 
let foo = bar :? System.Random // Error 

No creo que esto podría dar lugar a confusión, pero siempre se puede añadir box para convertir el argumento a obj, que pueden ser probados en contra de cualquier tipo:

let foo = box bar :? System.Random 
+0

Creo que lo ha hecho ... Si juego con él en la ventana interactiva, sigue dando errores de "Tipo de falta de coincidencia de consistencia" si no son del mismo tipo que me sacaron un poco del olor ... parece funcionar bien en el editor actual. –

+0

@Ciemnl: agregué cierta información sobre la posible fuente de advertencias confusas. Sin embargo, no estoy seguro de cómo se puede obtener el "desajuste de restricción de tipo". –

+1

sí, esa era la razón por la que ... el compilador estaba siendo demasiado inteligente con mi prueba rápida para ver si funcionaba. ¡Subestimé F #! Estoy realmente impresionado con el lenguaje que lo pienso ... –

Cuestiones relacionadas