共用方式為


Tuple (F#)

Tuple 是不具名但有先後順序之值 (型別可能不同) 的群組。

( element , ... , element ) 

備註

前一個語法中的每個 element 都可以是任何運算式。

範例

Tuple 範例包括相同或不同型別的雙重組、三重組等。 下列程式碼說明部分範例。

// Tuple of two integers.
( 1, 2 ) 

// Triple of strings.
( "one", "two", "three" ) 

// Tuple of unknown types.
( a, b ) 

// Tuple that has mixed types.
( "one", "1", "2.0" ) 

// Tuple of integer expressions.
( a + 1, b + 1) 

取得個別值

您可以使用模式比對來存取以及指派 Tuple 項目的名稱,如下列程式碼所示。

let print tuple1 =
   match tuple1 with
    | (a, b) -> printfn "Pair %A %A" a b

您可以在 let 繫結中使用 Tuple 模式,如下所示。

let (a, b) = (1, 2)

這會同時繫結 a 和 b 值。 如果您只需要 Tuple 的一個項目,則可以使用萬用字元 (底線),避免為不需要的變數建立新名稱。

let (a, _) = (1, 2)

函式 fst 和 snd 會分別傳回 Tuple 的第一個和第二個項目。

let c = fst (1, 2)
let d = snd (1, 2)

沒有可傳回三重組之第三個項目的內建函式,但是您可以輕鬆撰寫一個函式,如下所示。

let third (_, _, c) = c

通常最好使用模式比對來存取個別的 Tuple 項目。

使用 Tuple

Tuple 提供方便的方式,從函式傳回多個值,如下列範例所示。 這個範例會執行整數除法,並傳回這項運算的捨入結果做為 Tuple 雙重組的第一個成員,而將餘數做為雙重組的第二個成員。

let divRem a b = 
   let x = a / b
   let y = a % b
   (x, y)

當您要避免一般函式語法所表示的函式引數發生隱含局部調用時,也可以使用 Tuple 做為函式引數。

let sumNoCurry (a, b) = a + b

用於定義 let sum a b = a + b 函式的一般語法可讓您定義做為部分套用第一個函式引數的函式,如下列程式碼所示。

let addTen = sum 10
let result = addTen 95  
// Result is 105.

使用 Tuple 做為參數會停用局部調用。 如需詳細資訊,請參閱函式 (F#) 中的<部分套用引數>。

Tuple 型別名稱

當您撰寫做為 Tuple 的型別名稱時,* 符號是用來分隔項目。 對於由 int、float 和 string 組成的 Tuple (例如 (10, 10.0, "ten")),型別撰寫如下。

int * float * string

Tuple 的編譯形式

如果您只使用 F# 中的 Tuple,而不向其他語言公開它們,而且您的目標不是設為 .NET Framework 第 4 版之前的版本,則可以略過本節。

Tuple 會編譯為在 Arity 上多載之其中一種泛型型別的物件 (全都命名為 Tuple) 或型別參數的數目。 如果您透過另一種語言 (例如 C# 或 Visual Basic) 檢視 Tuple 型別,或使用無法辨識 F# 建構的工具,則 Tuple 型別會以此形式顯示。 在 .NET Framework 4 中,已引進 Tuple 型別。 如果您的目標是舊版 .NET Framework,則編譯器會使用 2.0 版的 F# 核心程式庫的 System.Tuple 版本。 這個程式庫中的型別只適用於以 2.0、3.0 和 3.5 版的 .NET Framework 為目標的應用程式。 型別轉送是用來確定 .NET Framework 2.0 與 .NET Framework 4 F# 元件之間的二進位相容性。

請參閱

其他資源

F# 語言參考

F# 型別