Declarações de importação: A palavra-chave aberta (F#)
Um Importar a declaração Especifica um namespace cujos elementos que você pode referenciar sem usar um nome totalmente qualificado ou um módulo.
open module-or-namespace-name
Comentários
Referência ao código, usando o caminho totalmente qualificado de namespace ou módulo sempre pode criar código que é difícil escrever, ler e manter. Em vez disso, você pode usar o open palavra-chave para usados em módulos e os namespaces para que quando você referencia um membro desse módulo ou namespace, você pode usar a forma abreviada do nome em vez do nome totalmente qualificado. Esta palavra-chave é semelhante ao using palavra-chave em C#, using namespace na Visual C++, e Imports na Visual Basic.
O módulo ou o espaço para nome fornecido deve estar no mesmo projeto ou em um projeto referenciado ou de um assembly. Se não estiver, você pode adicionar uma referência ao projeto ou usar o -reference comando-opção de linha (ou abreviatura, -r). Para obter mais informações, consulte Opções do compilador (F#).
A declaração de importação disponibiliza os nomes no código que segue a declaração, até o final do delimitador namespace, módulo ou arquivo.
Quando você usa várias declarações de importação, devem ser exibidos em linhas separadas.
O código a seguir mostra o uso de open palavra-chave para simplificar o código.
// Without the import declaration, you must include the full
// path to .NET Framework namespaces such as System.IO.
let writeToFile1 filename (text: string) =
let stream1 = new System.IO.FileStream(filename, System.IO.FileMode.Create)
let writer = new System.IO.StreamWriter(stream1)
writer.WriteLine(text)
// Open a .NET Framework namespace.
open System.IO
// Now you do not have to include the full paths.
let writeToFile2 filename (text: string) =
let stream1 = new FileStream(filename, FileMode.Create)
let writer = new StreamWriter(stream1)
writer.WriteLine(text)
writeToFile2 "file1.txt" "Testing..."
O compilador F# não emitir um erro ou aviso quando ambigüidades ocorrem quando o mesmo nome ocorre em mais de um módulo de abrir ou namespace. Quando ocorrem em ambigüidades, F# dá preferência para o namespace ou módulo abertos mais recentemente. Por exemplo, no código a seguir, empty significa Seq.empty, mesmo que empty está localizado em ambos os List e Seq módulos.
open List
open Seq
printfn "%A" empty
Portanto, tenha cuidado ao abrir, como o módulos ou namespaces List ou Seq que contêm membros que têm nomes idênticos; em vez disso, considere o uso de nomes qualificados. Você deve evitar qualquer situação na qual o código depende a ordem das declarações de importação.
Namespaces que estão abertas por padrão
Alguns namespaces com tanta freqüência são usados no código do F# que são abertos implicitamente sem a necessidade de uma declaração explícita de importação. A tabela a seguir mostra os espaços para nome estiverem abertos por padrão.
Namespace |
Descrição |
---|---|
Microsoft.FSharp.Core |
Contém definições de tipo F# básicas para tipos internos, como int e float. |
Microsoft.FSharp.Core.Operators |
Contém operações aritméticas básicas, como + e *. |
Microsoft.FSharp.Collections |
Contém classes de coleção imutáveis, como List e Array. |
Microsoft.FSharp.Control |
Contém os tipos de construções de controle como, por exemplo, a avaliação lenta e fluxos de trabalho assíncronos. |
Microsoft.FSharp.Text |
Contém funções para i / o formatado, como o printf função. |
Atributo de AutoOpen
Você pode aplicar o AutoOpen atributo a um assembly, se você deseja abrir automaticamente um namespace ou o módulo quando o assembly é referenciado. Você também pode aplicar o AutoOpen de atributo a um módulo para abrir o módulo automaticamente ao abrir o módulo do pai ou namespace. Para obter mais informações, consulte Classe Core.AutoOpenAttribute (F#).