Espaços para nome (F#)
Um espaço para nome lhe permite organizar o código em áreas de funcionalidade relacionada, permitindo que você anexe um nome a um agrupamento de elementos do programa.
namespace [parent-namespaces.]identifier
Comentários
Se você deseja colocar o código em um namespace, a primeira declaração no arquivo deve declarar o namespace. O conteúdo do arquivo inteiro se tornarão parte do namespace.
Espaços para nome diretamente não podem conter valores e funções. Em vez disso, funções e os valores devem ser incluídas nos módulos e módulos são incluídos nos namespaces. Espaços para nome podem conter tipos de módulos.
Espaços para nome podem ser declarados explicitamente com a palavra-chave de namespace ou implicitamente ao declarar um módulo. Para declarar um espaço para nome explicitamente, use a palavra-chave do espaço para nome seguida do nome do namespace. O exemplo a seguir mostra um arquivo de código que declara um espaço para nome Widgets com um tipo e um módulo incluído no namespace.
namespace Widgets
type MyWidget1 =
member this.WidgetName = "Widget1"
module WidgetsModule =
let widgetName = "Widget2"
Se todo o conteúdo do arquivo estiver em um módulo, você pode também declarar namespaces implicitamente, usando o module palavra-chave e fornecendo o novo nome do namespace do nome totalmente qualificado do módulo. O exemplo a seguir mostra um arquivo de código declara um espaço para nome Widgets e um módulo de WidgetsModule, que contém uma função.
module Widgets.WidgetModule
let widgetFunction x y =
printfn "%A %A" x y
O código a seguir é equivalente ao código anterior, mas o módulo é uma declaração de local do módulo. Nesse caso, o namespace deve aparecer em sua própria linha.
namespace Widgets
module WidgetModule =
let widgetFunction x y =
printfn "%A %A" x y
Se mais de um módulo é necessário no mesmo arquivo em um ou mais namespaces, você deve usar as declarações do módulo local. Quando você usa as declarações do módulo local, é possível usar o espaço para nome qualificado nas declarações do módulo. O código a seguir mostra um arquivo que tem uma declaração de namespace e duas declarações do módulo local. Nesse caso, os módulos estão contidos diretamente no namespace; Não há nenhum módulo criado implicitamente que tem o mesmo nome do arquivo. Qualquer outro código no arquivo, como um do a ligação, é no namespace, mas não nos módulos internos, portanto você precisa qualificar o membro do módulo widgetFunction usando o nome do 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
A saída deste exemplo é o seguinte.
Module1 10 20
Module2 5 6
Para obter mais informações, consulte Módulos (F#).
Namespaces aninhados
Quando você cria um namespace aninhado, preciso qualificá-la totalmente. Caso contrário, você pode criar um novo namespace de nível superior. Recuo é ignorado nas declarações de namespace.
O exemplo a seguir mostra como declarar um namespace aninhado.
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"
Namespaces em arquivos e Assemblies
Namespaces podem abranger vários arquivos em um único projeto ou a compilação. O termo o fragmento de namespace descreve a parte de um namespace que está incluído em um arquivo. Namespaces também podem abranger vários assemblies. Por exemplo, o System namespace inclui todo o .NET Framework, que abrange muitos assemblies e contém vários namespaces aninhados.
Namespace global
Você usa o namespace predefinido global para colocar os nomes na.NET namespace de nível superior.
namespace global
type SomeType() =
member this.SomeMember = 0
Você também pode usar global para fazer referência de nível superior.NET namespace, por exemplo, para resolver conflitos de nome com outros namespaces.
global.System.Console.WriteLine("Hello World!")