共用方式為


匯入宣告:open 關鍵字 (F#)

「匯入宣告」(Import Declaration) 可指定在不使用完整限定名稱的情形下,參考其項目的模組或命名空間。

open module-or-namespace-name

備註

每次參考程式碼時都使用完整限定命名空間或模組路徑,會讓程式碼難以撰寫、閱讀及維護。您可以對常用的模組和命名空間改用 open 關鍵字,如此在參考該模組或命名空間的成員時,可以使用簡短名稱形式,而不是完整限定名稱。這個關鍵字類似 C# 中的 using 關鍵字、Visual C++ 中的 usingnamespace,以及 Visual Basic 中的 Imports。

所提供的模組或命名空間必須是在相同的專案中,或是在參考的專案或組件中。如果不是,您可以將參考加入專案中,或使用 -reference 命令列選項 (或其縮寫 -r)。-如需詳細資訊,請參閱編譯器選項 (F#)

匯入宣告能讓名稱可用於宣告後面的程式碼,一直到封入命名空間、模組或檔案結尾為止。

當您使用多個匯入宣告時,應該將它們放在不同行。

下列程式碼會示範如何使用 open 關鍵字簡化程式碼。

// 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# 編譯器不會發出錯誤或警告。發生語意模糊的情況時,F# 會優先使用最近開啟的模組或命名空間。例如,在下列程式碼中,雖然 empty 同時位於 List 和 Seq 模組中,但是 empty 表示 Seq.empty。

open List
open Seq
printfn "%A" empty

因此,當您開啟包含同名成員的模組或命名空間 (例如 List 或 Seq) 時,請務必小心謹慎,或者考慮改用限定名稱。撰寫程式碼時,要避免相依於匯入宣告順序的情況。

預設開啟的命名空間

F# 程式碼中有些命名空間因為常用會隱含開啟,而不需要明確匯入宣告。下表列出預設開啟的命名空間。

命名空間

描述

Microsoft.FSharp.Core

包含內建型別 (例如 int 和 float) 的基本 F# 型別定義。

Microsoft.FSharp.Core.Operators

包含基本算術運算,例如 + 和 *。

Microsoft.FSharp.Collections

包含不可變集合類別,例如 List 和 Array。

Microsoft.FSharp.Control

包含控制項建構 (例如,延遲評估和非同步工作流程) 的型別。

Microsoft.FSharp.Text

包含格式化之 IO 的函式,例如 printf 函式。

AutoOpen 屬性

如果您要在參考組件時自動開啟命名空間或模組,可以將 AutoOpen 屬性套用至該組件。您也可以將 AutoOpen 屬性套用至模組,以便在開啟父模組或命名空間時自動開啟該模組。如需詳細資訊,請參閱 Core.AutoOpenAttribute 類別 (F#)

RequireQualifiedAccess 屬性

某些模組、 記錄或等位型別可以指定 RequireQualifiedAccess 屬性。當您參考這類模組、 記錄或等位的項目時,您必須使用限定的名稱,而不管您將包含的匯入宣告。當您使用這個屬性策略性的型別會定義最常使用的名稱,,你幫助避免名稱衝突,並藉此讓程式碼更有彈性的程式庫中的變更。如需詳細資訊,請參閱 Core.RequireQualifiedAccessAttribute 類別 (F#)

請參閱

參考

命名空間 (F#)

模組 (F#)

其他資源

F# 語言參考