Compartir a través de


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!")

Vea también

Referencia

Módulos (F#)

Otros recursos

Referencia del lenguaje F#