2011-06-23 13 views
7

estoy empezando con F # y me pregunto acerca de las unidades de medida:¿Cómo se representan las unidades de medida?

entiendo que sólo están presentes en tiempo de compilación y el reflector lo confirma: la creación de una unidad de medida que no es un alias crea una clase con MeasureAttribute atribuyen, pero aparte de eso, float<km/h> se representa como llanura System.Double. Y no hay atributos en el tipo, parámetro de constructor o propiedades.

Hasta ahora lo entiendo. Pero cuando hago referencia al ensamblado compilado de otro proyecto, parece saber todo sobre las unidades de medida, incluidos los alias. ¿Cómo obtiene esa información? ¿Dónde están en la asamblea?

Respuesta

10

F # tiendas 'información adicional de tipo' en un recurso en el ensamblado compilado, y el F # compilador sabe cómo leer ese recurso. Así que mientras que una unión discriminada sólo está compilado en, digamos, una clase, y una unidad de medida se borra en un doble, no hay F información de tipo # específico de extra en un recurso en el montaje de manera que cuando el F # compilador lo lee, lo que puede reconstruya los metadatos adicionales "F #".

El PowerPack tiene un lector de metadatos que le permite acceder a él mediante programación.

Cuestiones relacionadas