Я читал мою долю оплаты 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")
Вы можете использовать записей в сопоставлении с шаблоном , поэтому кортежи действительно удобны и должны заменяться записями по мере роста кода.
Если в дискриминационном объединении есть несколько кортежей с одинаковой подписью, то пора разбить его на два дискриминационных объединения. Это также не позволит вам иметь несколько записей с одной и той же подписью.
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