Я прочитал свою долю в 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 они могут иметь имена. –
@JamesMoore Да, это меня радует: D –