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#).

Consulte também

Referência

Espaços para nome (F#)

Módulos (F#)

Outros recursos

Referência de linguagem do F#