2011-06-23 53 views
7

我只是用F#開始,我想知道關於度量單位:如何表示計量單位?

我知道他們僅出現在編譯時和反射器證實了這一點:在創建度量單位是不是別名創建了MeasureAttribute類屬性,但除此之外,float<km/h>表示爲普通System.Double。並且在類型,構造函數參數或屬性上沒有屬性。

到目前爲止我明白了。但是當我從另一個項目中引用編譯好的程序集時,它似乎完全知道度量單位,包括別名。它如何獲得這些信息?在大會的哪個地方?

回答

10

F#將「額外的類型信息」存儲在編譯程序集的資源中,F#編譯器知道如何讀取該資源。因此,雖然區分的聯合僅編譯到類中,並且度量單位被擦除爲雙精度型,但程序集中的資源中還存在額外的F#特定類型信息,因此當F#編譯器讀取它時,它可以重新構建額外的「F#元數據」。

PowerPack有一個元數據閱讀器,可讓您以編程方式訪問它。