2012-03-03 9 views

risposta

13

Purtroppo, non è possibile passare i tipi come parametri statici a un provider tipo. I parametri statici passati utilizzando MyProvider< "first argument", 42 > devono essere tipi primitivi (come string, int e simili). Non vedo la lista da nessuna parte nella documentazione, ma Type non è sicuramente supportata.

Il problema di questa operazione è che si potrebbe passare typeof<MyType> dove MyType è dichiarato nello stesso file del file che sta utilizzando il provider tipo, e così il compilatore F # avrebbe dovuto compilare prima la prima parte di un file, quindi richiamare il provider e quindi continuare. Sembra possibile, ma probabilmente è a bassa priorità per il team di F #.

Il modo migliore per passare le informazioni sul tipo a un provider tipo è quello di dare un nome tipo e quindi ricerca il tipo utilizzando la riflessione (questo funziona solo se il tipo è da un assembly già compilato):

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

Ha senso. Ecco perché, a mio avviso, abbiamo bisogno della nozione di livello di esecuzione. Simile a un'espressione di calcolo, che può alimentare l'ambiente principale con Tipi, senza ricorrere a DLL esterne e il cui codice viene eseguito prima di altri livelli di esecuzione più elevati. – nicolas

Problemi correlati