F# 類型
此主題會描述 F# 中所使用的型別,以及 F# 型別的命名及描述方式。
F# 型別的摘要
某些型別會被視為基本型別,例如布林值型別 bool
和各種大小的整數和浮點數型別,其中包括位元組和字元的型別。 這些型別會在基本型別中描述。
內建於語言中的其他型別包括元組、清單、陣列、序列、記錄和區分聯合。 如果您有其他.NET 語言的使用經驗並且正在學習 F#,應該閱讀其中每個型別的主題。 這些 F# 專屬型別支援功能性程式設計語言通用的程式設計樣式。 其中許多型別在 F# 程式庫中都有相關聯的模組,可支援這些型別的一般作業。
函式的型別包含參數型別和傳回型別的相關資訊。
.NET Framework 是物件型別、介面別型、委派型別和其他型別的來源。 您可以定義自己的物件型別,就像使用任何其他 .NET 語言一樣。
此外,F# 程式碼可以定義別名,這些別名會以型別縮寫命名,也就是型別的替代名稱。 當型別可能會在未來變更,而且您想要避免變更相依於型別的程式碼時,您就可以使用型別縮寫。 或者,您可以使用型別縮寫作為型別的自訂名稱,讓程式碼更容易閱讀和瞭解。
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 | function-type 的委派 | delegate of unit -> int |
彈性型別 | #type-name | #System.Windows.Forms.Control #seq<int> |
[相關主題]
主題 | 說明 |
---|---|
基本類型 | 描述內建的簡單型別,例如整數型別、布林值型別和字元型別。 |
單位類型 | 描述 unit 型別,該型別具有一個以 () 表示的值;相當於 C# 中的 void 和 Visual Basic 中的 Nothing 。 |
元組 | 描述元組型別,此型別是由分成兩個一組、三個一組和四個一組等等的任何型別的相關聯值所組成。 |
選項 | 描述選項型別,該型別可能具有值或空白。 |
清單 | 描述清單,也就是型別皆相同、已排序且不可變的元素系列。 |
陣列 | 描述陣列,這些陣列是型別相同且可變的已排序元素集合,這些元素會佔用連續記憶體區塊且大小固定。 |
序列 | 描述序列型別,其表示值的邏輯數列;個別值只會在需要時計算。 |
記錄 | 描述記錄型別,這是具名值的小型彙總。 |
已區分的聯集 | 描述區分聯合型別,其值可以是一組可能型別中的任一個值。 |
函數 | 描述函式值。 |
類別 | 描述類別型別,這是對應至 .NET 參考型別的物件型別。 類別型別可以包含成員、屬性、實作的介面和基底型別。 |
結構 | 描述 struct 型別,這是對應至 .NET 實值型別的物件型別。 struct 型別通常代表小型的資料彙總。 |
介面 | 描述介面型別,這些型別代表提供特定功能但不包含資料的一組成員。 介面型別必須由物件型別實作才有用。 |
委派 | 描述委派型別,其代表作為物件的函式。 |
列舉 | 描述列舉型別,其值屬於一組具名值。 |
屬性 | 描述屬性,這些屬性可用來指定另一種型別的中繼資料。 |
例外狀況類型 | 描述指定錯誤資訊的例外狀況。 |