2012-03-03 14 views

Respuesta

13

Por desgracia, no se puede pasar tipos como parámetros estáticos a un proveedor tipo. Los parámetros estáticos pasados ​​usando MyProvider< "first argument", 42 > tienen que ser tipos primitivos (como string, int y similares). No veo la lista en ningún lugar de la documentación, pero Type definitivamente no es compatible.

El problema de hacer esto es que podría pasar typeof<MyType> donde MyType se declara en el mismo archivo que el archivo que está utilizando el tipo de proveedor, por lo que el F # compilador tendría que compilar primero la primera parte de un archivo, luego invoque al proveedor y luego continúe. Esto parece posible, pero probablemente sea de baja prioridad para el equipo F #.

La mejor manera de pasar información sobre el tipo de un proveedor de Tipo es para darle un nombre de tipo y luego buscar el tipo de uso de la reflexión (esto sólo funcionará si el tipo es de un ensamblaje ya compilado):

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

Tiene sentido. Es por eso que, en mi opinión, necesitamos la noción del nivel de ejecución. Similar a una expresión de cálculo, que puede alimentar el entorno principal con Types, sin ressorting a DLL externos, y cuyo código se ejecuta antes de otros niveles de ejecución superiores. – nicolas

Cuestiones relacionadas