Espacios de nombres (F#)
Un espacio de nombres permite organizar el código en áreas de funcionalidad relacionada, a fin de adjuntar un nombre a una agrupación de elementos de programa.
namespace [parent-namespaces.]identifier
Comentarios
Si se desea colocar código en un espacio de nombres, la primera declaración del archivo debe declarar el espacio de nombres.A continuación, el contenido de todo el archivo formará parte del espacio de nombres.
Los espacios de nombres no pueden contener valores ni funciones directamente.En lugar de ello, los valores y las funciones se deben incluir en módulos, y estos en los espacios de nombres.Los espacios de nombres pueden contener tipos y módulos.
Los espacios de nombres se pueden declarar explícitamente mediante la palabra clave namespace o implícitamente al declarar un módulo.Para declarar un espacio de nombres explícitamente, se utiliza la palabra clave namespace seguida por el nombre del espacio de nombres.En el ejemplo siguiente se muestra un archivo de código que declara el espacio de nombres Widgets con un tipo y un módulo incluido en el espacio de nombres.
namespace Widgets
type MyWidget1 =
member this.WidgetName = "Widget1"
module WidgetsModule =
let widgetName = "Widget2"
Si el contenido completo del archivo se encuentra en un módulo, también se pueden declarar los espacios de nombres de manera implícita; para ello, se utiliza la palabra clave module y se proporciona el nombre del nuevo espacio de nombres en el nombre del módulo completo.En el ejemplo siguiente se muestra un archivo de código que declara el espacio de nombres Widgets y el módulo WidgetsModule, que contiene una función.
module Widgets.WidgetModule
let widgetFunction x y =
printfn "%A %A" x y
El código siguiente es equivalente al código anterior, pero el módulo es una declaración de módulo local.En este caso, el espacio de nombres debe aparecer en su propia línea.
namespace Widgets
module WidgetModule =
let widgetFunction x y =
printfn "%A %A" x y
Si se necesita más de un módulo en el mismo archivo en uno o más espacios de nombres, se deben utilizar declaraciones de módulo locales.Cuando se utilizan declaraciones de módulo locales, no se puede utilizar el espacio de nombres calificado en las declaraciones de módulo.En el código siguiente se muestra un archivo que tiene una declaración de espacio de nombres y dos declaraciones de módulo locales.En este caso, los módulos están contenidos directamente en el espacio de nombres; no hay ningún módulo creado de manera implícita que tenga el mismo nombre que el archivo.El resto del código del archivo, como un enlace do, por ejemplo, se encuentra en el espacio de nombres pero no en los módulos internos, de modo que es preciso calificar el miembro de módulo widgetFunction mediante el nombre del módulo.
namespace Widgets
module WidgetModule1 =
let widgetFunction x y =
printfn "Module1 %A %A" x y
module WidgetModule2 =
let widgetFunction x y =
printfn "Module2 %A %A" x y
module useWidgets =
do
WidgetModule1.widgetFunction 10 20
WidgetModule2.widgetFunction 5 6
La salida de este ejemplo es la siguiente.
Module1 10 20
Module2 5 6
Para obtener más información, vea Módulos (F#).
Espacios de nombres anidados
Al crear un espacio de nombres anidado, debe calificarse por completo.De lo contrario, se crea un nuevo espacio de nombres de nivel superior.La sangría se omite en las declaraciones de espacio de nombres.
En el siguiente ejemplo se muestra cómo declarar un espacio de nombres anidado.
namespace Outer
// Full name: Outer.MyClass
type MyClass() =
member this.X(x) = x + 1
// Fully qualify any nested namespaces.
namespace Outer.Inner
// Full name: Outer.Inner.MyClass
type MyClass() =
member this.Prop1 = "X"
Espacios de nombres en archivos y ensamblados
Los espacios de nombres pueden abarcar varios archivos de un mismo proyecto o una misma compilación.El término fragmento de espacio de nombres describe la parte de un espacio de nombres que se incluye en un archivo.Los espacios de nombres también pueden extenderse por varios ensamblados.Por ejemplo, el espacio de nombres System incluye la totalidad de .NET Framework, que abarca gran cantidad de ensamblados y contiene numerosos espacios de nombres anidados.
Global (Espacio de nombres)
Se utiliza el espacio de nombres predefinido global para colocar nombres en el espacio de nombres de nivel superior de .NET.
namespace global
type SomeType() =
member this.SomeMember = 0
También se puede utilizar global para hacer referencia al espacio de nombres de nivel superior de .NET, por ejemplo, para resolver conflictos de nomenclatura con otros espacios de nombres.
global.System.Console.WriteLine("Hello World!")