Udostępnij za pośrednictwem


Deklaracje importowania: open — Słowo kluczowe (F#)

Zgłoszenia przywozowego Określa moduł lub nazw elementów, których można odwołać się bez korzystania z w pełni kwalifikowana nazwa.

open module-or-namespace-name

Uwagi

Odwoływanie się do kodu przy użyciu w pełni kwalifikowana ścieżka obszaru nazw lub moduł zawsze można utworzyć kod, który jest trudny do pisania, odczytywać i utrzymywania.Zamiast tego można użyć open słowo kluczowe dla często używanych modułów i obszary nazw, tak, aby podczas tworzenia odwołania do tego modułu lub obszaru nazw, można użyć forma krótka nazwa, zamiast w pełni kwalifikowaną nazwę.This keyword is similar to the using keyword in C#, usingnamespace in Visual C++, and Imports in Visual Basic.

Moduł lub obszar nazw, pod warunkiem musi być tego samego projektu lub do którego istnieje odwołanie projektu lub zestawu.Jeśli nie, można dodać odwołanie do projektu lub używać -reference polecenia-linii opcji (lub jej skrót -r).Aby uzyskać więcej informacji, zobacz Opcje kompilatora (F#).

Zgłoszenia przywozowego udostępnia nazwy w deklaracji, do końca otaczający obszar nazw, moduł lub plik następujący kod.

Użycie wielu deklaracjach przywozowych powinny znaleźć się w oddzielnych wierszach.

Poniższy kod ilustruje wykorzystanie open słowa kluczowego do uproszczenia kodu.

// 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..."

F# kompilator nie emituje błąd lub ostrzeżenie podczas niejasności wystąpić podczas tej samej nazwie występuje w więcej niż jeden moduł otwarte lub obszaru nazw.Gdy występują niejasności, F# daje preferencje bardziej niedawno otwieranych moduł lub obszaru nazw.Na przykład w poniższym kodzie empty oznacza Seq.empty, mimo że empty znajduje się w obu List i Seq modułów.

open List
open Seq
printfn "%A" empty

Dlatego należy zachować ostrożność przy otwieraniu takich jak moduły lub obszarów nazw List lub Seq zawierające elementy członkowskie, które mają identyczne nazwy; Zamiast tego należy rozważyć użycie nazwy kwalifikowanej.Należy unikać każdej sytuacji, w której kod jest zależne od kolejności zgłoszenia przywozowego.

Przestrzenie nazw, które są domyślnie otwarty

Niektóre obszary nazw często są używane w kod F# że otwierane niejawnie bez konieczności zgłoszenia przywozowego jawne.W poniższej tabeli przedstawiono przestrzenie nazw, które są domyślnie otwarty.

Obszar nazw

Opis

Microsoft.FSharp.Core

Zawiera podstawowe definicje typu F# wbudowanych typów, takie jak int i float.

Microsoft.FSharp.Core.Operators

Zawiera podstawowe operacje arytmetyczne, takie jak + i *.

Microsoft.FSharp.Collections

Zawiera niezmienne kolekcji klas, takie jak List i Array.

Microsoft.FSharp.Control

Zawiera typy kontroli konstrukcje, takich jak ocena leniwy i asynchroniczne przepływy pracy.

Microsoft.FSharp.Text

Zawiera funkcje dla sformatowaną we/wy, takie jak printf funkcji.

Atrybut AutoOpen

Można stosować AutoOpen atrybutu do zestawu, aby automatycznie otworzyć obszar nazw lub moduł, gdy odwołanie do zestawu.Można również zastosować AutoOpen atrybutu do modułu, aby automatycznie otworzyć tego modułu, po otwarciu moduł nadrzędnej lub obszaru nazw.Aby uzyskać więcej informacji, zobacz Core.AutoOpenAttribute — Klasa (F#).

Atrybut RequireQualifiedAccess

Niektóre moduły, rekordy lub typów Unii mogą określić atrybutu RequireQualifiedAccess.Podczas tworzenia odwołania do elementów tych modułów, rekordy lub związków, należy użyć kwalifikowaną nazwą, niezależnie od tego, czy zawierają zgłoszenia przywozowego.Jeśli ten atrybut zostanie użyty strategicznie na typów, które definiują powszechnie używane nazwy, pomóc uniknąć konfliktów nazw i tym samym wprowadzić kod bardziej odporne na zmiany w bibliotekach.Aby uzyskać więcej informacji, zobacz Core.RequireQualifiedAccessAttribute — Klasa (F#).

Zobacz też

Informacje

Przestrzenie nazw (F#)

Moduły (F#)

Inne zasoby

Materiały referencyjne dotyczące języka F#