2011-06-23 12 views
7

Sono solo che iniziano per F # e mi chiedo su unità di misura:Come vengono rappresentate le unità di misura?

Capisco che sono presenti solo in fase di compilazione e riflettore lo conferma: la creazione di un'unità di misura che non è un alias crea una classe con MeasureAttribute attributo, ma a parte questo, float<km/h> è rappresentato come semplice System.Double. E non ci sono attributi sul tipo, parametro costruttore o proprietà.

Finora ho capito. Ma quando faccio riferimento all'assemblaggio compilato da un altro progetto, sembra sapere tutto sulle unità di misura, inclusi gli alias. Come ottiene quell'informazione? Dove sono nell'assemblea?

risposta

10

F # memorizza le "informazioni sui tipi extra" in una risorsa nell'assieme compilato e il compilatore F # sa come leggere tale risorsa. Quindi, mentre un'unione discriminata viene semplicemente compilata, diciamo, in una classe, e un'unità di misura viene cancellata in una doppia, esistono informazioni aggiuntive di tipo F # aggiuntive in una risorsa nell'assembly in modo che quando il compilatore F # la legge, può ricostruire i "metadati F # extra".

Il PowerPack dispone di un lettore di metadati che consente di accedervi a livello di programmazione.

Problemi correlati