2012-03-03 66 views

回答

13

不幸的是,您不能將類型作爲靜態參數傳遞給類型提供者。使用MyProvider< "first argument", 42 >傳遞的靜態參數必須是原始類型(如string,int等)。我沒有在文檔中的任何地方看到列表,但Type肯定不受支持。

這樣做的問題是您可以通過它typeof<MyType>其中MyType是在與使用類型提供程序的文件相同的文件中聲明的,因此F#編譯器必須首先編譯文件的第一部分,然後調用提供程序,然後繼續。這聽起來是可能的,但它可能是F#團隊的低優先級。

傳遞有關類型的類型提供者的信息,最好的辦法是給它一個類型名稱,然後使用反射查找類型(這一點,如果類型是從已編譯的程序集纔有效):

type MyTest = MyTypeProvider<"System.Int32"> 
+0

有道理。這就是爲什麼在我看來,我們需要執行級別的概念。類似於一個計算表達式,它可以用類型提供主環境,而不需要重新連接到外部DLL,並且其代碼在其他更高執行級別之前執行。 – nicolas 2012-03-04 17:19:46

相關問題