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