2012-02-21 18 views
15

Tengo un nombre chocando problema al abrir algunos ensamblados .NET en mi F # código usandoAliasing de espacio de nombres en F #?

open System.IO 

La única opción que encontré y utilización va a proporcionar los nombres completos de los tipos para los tipos de conflicto, pero esto es una un poco aburrido

¿Existe alguna posibilidad de definir un alias para el espacio de nombres .Net en F # para evitar el conflicto de nombres?

Respuesta

27

F # no admite alias de espacios de nombres, solo módulos y tipos. Por lo tanto, para resolver los conflictos entre los ensamblados .NET, desafortunadamente, necesitará definir alias para todos los tipos que está utilizando.

Esto puede ser un poco más fácil gracias al hecho de que los alias tipo F # se ven como declaraciones de tipo normal (por el compilador F #, no por el tiempo de ejecución). Esto significa que, a diferencia con C# using de palabras clave, puede definir en un archivo spearate:

// Aliases.fs 
namespace SysIO 

// Open the 'System' namespace to get a bit shorter syntax 
// ('type File = File' is interpreted as discriminated union) 
open System 

type File = IO.File 
type Directory = IO.Directory 

En el resto de la aplicación, ahora se puede utilizar SysIO.File. Todavía tiene que escribir los alias, pero al menos no tiene que hacer eso en todos los archivos ...

+1

Esta es una buena solución, solo necesito un puñado de tipos. –

+0

"solo módulos y tipos": solo son tipos, los módulos no pueden ser alias. estaría felizmente equivocado. – citykid

+2

estoy felizmente equivocado. los módulos se pueden alias de esta manera: módulo ACMEStore = ACME.DB.Store (http://stackoverflow.com/questions/3918744/how-to-use-namespace-or-type-alias-abbreviation) – citykid

Cuestiones relacionadas