F# 型別
本主題描述 F# 中所使用的型別以及 F# 型別的命名及描述方式。
F# 型別摘要
有些型別被視為「基本型別」(Primitive Type),例如布林型別 bool 以及各種大小的整數和浮點型別,包括位元組和字元的型別。 這些型別將在基本型別 (F#) 加以說明。
其他內建在語言的型別包含 Tuple、清單、陣列、序列、記錄和已區分的聯集。 如果您有其他 .NET 語言使用經驗並要學習 F#,您應該閱讀每個上述型別的主題。 這些型別詳細資訊的連結包含在本主題中的相關主題一節。 這些 F# 特定型別支援函式程式設計語言通用的程式設計風格。 F# 程式庫中有與許多型別關聯的模組支援這些型別的一般作業。
函式的型別包含參數型別和傳回型別的相關資訊。
.NET Framework 是物件型別、介面型別、委派型別等的來源。 您可以定義自己的物件型別,就好像任何其他 .NET 語言一樣。
此外,F# 程式碼可以定義別名,也稱為「型別縮寫」(Type Abbreviation),這是型別的替代名稱。 當型別在未來可能會變更,而且您要避免變更依賴此型別的程式碼時,可以使用型別縮寫。 或者,您可以將型別縮寫做為型別的易記名稱,讓程式碼更容易閱讀及了解。
F# 提供專函式的程式設計,考慮到有用的集合型別。 使用這些集合型別,可協助您撰寫程式碼,是在樣式中的功能較強。 如需詳細資訊,請參閱 F# 集合型別。
型別語法
在 F# 程式碼中,通常必須寫出型別名稱。 每個型別都有語法形式,您可以在型別附註、抽象方法宣告、委派宣告、簽章和其他建構中使用這些語法形式。 每當您在解譯器中宣告新程式建構時,解譯器都會列印建構名稱及其型別語法。 此語法可能只是使用者定義型別的識別項或是 int 或 string 等的內建識別項,但對於更複雜的型別,語法也會更複雜。
下表顯示 F# 型別的型別語法各個面相。
型別 |
型別語法 |
範例 |
---|---|---|
基本型別 |
type-name |
int float string |
彙總型別 (類別、結構、聯集、記錄、列舉等等) |
type-name |
System.DateTime Color |
型別縮寫 |
type-abbreviation-name |
bigint |
完整限定型別 |
namespaces.type-name 或 modules.type-name 或 namespaces.modules.type-name |
System.IO.StreamWriter |
陣列 |
type-name[] 或 type-name 陣列 |
int[] array<int> int array |
二維陣列 |
type-name[,] |
int[,] float[,] |
三維陣列 |
type-name[,,] |
float[,,] |
Tuple |
type-name1 * type-name2 ... |
例如,(1,'b',3) 具有型別 int * char * int |
Generic Type - 泛型型別 |
type-parameter generic-type-name 或 generic-type-name<type-parameter-list> |
'a list list<'a> Dictionary<'key, 'value> |
建構的型別 (已提供特定型別引數的泛型型別) |
type-argument generic-type-name 或 generic-type-name<type-argument-list> |
int option string list int ref option<int> list<string> ref<int> Dictionary<int, string> |
有單一參數的函式型別 |
parameter-type1 -> return-type |
採用 int 並傳回 string 的函式具有型別 int -> string |
有多個參數的函式型別 |
parameter-type1 -> parameter-type2 -> ... -> return-type |
採用 int 和 float 並傳回 string 的函式具有型別 int -> float -> string |
當做參數的高順序函式 |
(function-type) |
List.map 具有型別 ('a -> 'b) -> 'a list -> 'b list |
Delegate - 委派 |
delegate of function-type |
delegate of unit -> int |
彈性型別 |
#type-name |
#System.Windows.Forms.Control #seq<int> |
相關主題
主題 |
描述 |
---|---|
描述內建簡單型別,例如整數型別、布林型別和字元型別。 |
|
描述 unit 型別,這個型別只有一個值並以 () 表示,相當於 C# 中的 void 和 Visual Basic 中的 Nothing。 |
|
描述 Tuple 型別,這個型別是由雙重組、三重組、四重組等群組之任何型別的關聯值所組成。 |
|
描述選項型別,這個型別可能有值或是空白。 |
|
描述清單,是一連串已排序且不可變的項目,而且所有項目都是相同型別。 |
|
描述陣列,是相同型別的可變元素排序集合,這些元素佔用連續的記憶體區塊且有固定大小。 |
|
描述序列型別,表示一連串的邏輯值;需要時才會計算個別值。 |
|
描述記錄型別,即具名值的小型彙總。 |
|
描述已區分的聯集型別,其值可以是一組可能型別中的任何一個型別。 |
|
描述函式值。 |
|
描述類別型別,即對應於 .NET 參考型別的物件型別。 類別型別可以包含成員、屬性、已實作的介面和基底型別。 |
|
描述 struct 型別,即對應於 .NET 實值型別的物件型別。 struct 型別通常表示小型資料彙總。 |
|
描述介面型別,這類型別表示一組提供特定功能但不含任何資料的成員。 介面型別必須由物件型別實作才能使用。 |
|
描述將函式表示為物件的委派型別。 |
|
描述列舉型別,其值屬於一組具名值。 |
|
描述可用來指定另一個型別中繼資料的屬性。 |
|
描述可指定錯誤資訊的例外狀況。 |