5 2 2 元組型別和值建構函式

2021-08-25 19:12:34 字數 1293 閱讀 6591

5.2.2 元組型別和值建構函式

你已經知道元組值的型別是什麼樣子,我們在清單 5.1再次看到它。寫型別使用星號,例如,元組型別儲存整數和字串,寫成 int * string。在介紹這一章中,談論值和型別,我們解釋過一種型別是所有可能值的域。讓我們使用這種觀點,看一下元組型別:這種表示法如何反映由幾個基本型別組成元組型別的事實?

在這種表示法中,星號發揮著關鍵作用,因為,它可以作為型別建構函式 (type constructor)[1]。這意味著,你可以使用星號來從任何其他型別構造元組型別。我們前面提到過,型別指定了所有可能的值的域。使用這個術語,這個域指定了 int * string 型別的值,包含了整數和字串的所有可能組合。在 f# 中,不必顯式寫出型別,很多時候是由於型別推斷的奇蹟,但是,看看型別是如何構造的也非常有用。

另一方面,當編寫任何使用元組的**時,將使用值建構函式(value constructors)。這種建構函式是更接近於在 c# 中使用的建構函式。值的建構函式建立新的函式值,類似於在物件導向的建構函式建立乙個類的新例項的方式。這是語法,

允許從其他、 更簡單的值建立元組型別的值。例如,(1,"hello") 顯示了值建構函式的用法,它建立了乙個特定的值,屬於指定整數和字串的所有可能組合的這個域。要演示值和型別的建構函式之間的關係,讓我們看看另乙個示例。下面的**片斷顯示了,我們如何使用元組表示訊息,x, y 座標顯示在螢幕上顯示:

> let msgat1 = (50, 100, "hello world!");;

val msgat1 : int * int * string

> let msgat2 = ((50, 100), "hello world!");;

val msgat2 : (int * int) * string

**顯示了兩種不同的表示形式。在第一種情況中,我們使用有三個元素的單個元組,把所有的基本值儲存在一起。如你所見,列印的型別簽名反映了這些,顯示了由星號分隔的三個基本型別。在第二種情況下,我們首先構建乙個元組,以儲存 x 和 y 座標,然後,再把這個值與訊息組合成另乙個元組。正如你所看到的,該型別再次反映了這個構造架構。這兩個型別是不同的,這也是值得注意的。第一種是有三個元素的元組,而第二種是乙個元組,包含了乙個元組和乙個字串。這意味著,當你構建這些元組時,你應始終考慮可用選項。在這種情況下,我們最好選擇第二個選項,因為,似乎是合理的,x 和 y 值形成單組成代表座標值。另一方面,字串值表示訊息,與座標稍微無關。讓我們看看如何正確使用元組的幾個詳細指導。

[1] 在 .net 的術語中,型別建構函式用於,引用靜態類的建構函式,在型別中初始化靜態資料。在這裡,我們在使用函式程式設計術語中,型別建構函式用來從給定的型別構建新的型別。

基礎 02元組和字典型別

目錄 1 元組型別 1.1元祖建立 1.2 空元祖型別建立 1.3 元組修改 1.4 元組的刪除 2 字典型別 不需要括號可以但是乙個元素就當成了字串型別了 tup1 a type tup1 tup2 a b type tup2 tup3 1,2,3,4 tup3 1,2,3,4 tup4 zx x...

Python 序列型別2 元組tuple)

元組與列表相似,不同的是元組內的元素不可更改 列表與元組可以相互轉換 使用元組的好處 1.元組的建立tup 1 2 tup1 1 tup2 a b c 元組的建立只需在小括號內新增由逗號分割的元素即可 注 當元組內只有乙個元素時,需在元素後加逗號否則型別不明確 如下tup 1 tup1 1 prin...

python雜記(3) 元組與函式

1 元組 元組tuple,與列表有很多類似。區別主要是元組中的元素是不可改變的 它的定義使用 而不是 tuple1 1 2,3 4,5 6 print tuple1 2 tuple2 123 abc pht 123 456 tuple2 tuple2 2 哈哈 tuple2 2 元組的插入,哈哈 的...