我已經閱讀了我在F#上的票價分享,無論是在互聯網上還是在書本上,但從未見過任何人使用別名作爲文檔形式。所以我要說這不是標準的做法。它也可以被看作是代碼重複的一種形式。
通常,一個特定的元組表示只能用作一個函數中的臨時數據結構。如果您長時間存儲元組或在不同類之間傳遞元組,則是時候創建記錄。
如果您打算在多個類中使用區分的聯合,那麼請按照您的建議使用記錄,或將所有方法的作用域限定爲區分的聯合,如下所示。
type NetworkEvent =
| Message of string * string * string
static member Create(sender, recipient, message) =
Message(sender, recipient, message)
member this.Send() =
math this with
| Message(sender, recipient, message) ->
printf "Sent: %A" message
let message = NetworkEvent.Create("me", "you", "hi")
您可以使用records in pattern matching,所以元組是真正的方便起見,應由記錄作爲代碼的增長所取代。
如果一個受歧視的工會有一堆具有相同簽名的元組,那麼是時候把它分成兩個有區別的工會。這也會阻止您擁有多個具有相同簽名的記錄。
type NetworkEvent2 =
| UDPMessage of string * string * string
| Broadcast of string * string * string
| Loopback of string * string * string
| ConnectionRequest of string
| FlushEventQueue
到
type MessageType =
| UDPMessage
| Broadcast
| Loopback
type NetworkEvent =
| Message of MessageType * string * string * string
| ConnectionRequest of string
| FlushEventQueue
在F#3.1中,它們可以有名稱。 – 2014-05-02 23:07:56
@JamesMoore是的,這讓我很開心:D – 2014-05-03 03:28:37