에
type NetworkEvent2 =
| UDPMessage of string * string * string
| Broadcast of string * string * string
| Loopback of string * string * string
| ConnectionRequest of string
| FlushEventQueue
.많은 데모에서 동일한 접근법을 사용합니다 (for example this one 참조). 일부 사용자는 프로덕션 응용 프로그램에서도이 방법을 사용합니다.
형식 별칭 사용 :이 방법을 사용하면 IntelliSense에서 볼 수있는 문서를 추가 할 수 있지만 형식 시스템을 통해 전파되지는 않습니다. 별칭 형식의 값을 사용하면 컴파일러에서 string
으로 처리하므로 어디서나 추가 설명서가 표시되지 않습니다.
단일 케이스 유니온 사용이 패턴은 F # 컴파일러의 일부 위치에서 사용되었습니다. 유형 SenderName
이 string
와 다른 유형 실제로 때문에 (다른 한편으로는,이 작은 약간의 성능 저하가있을 수 있습니다), 타입 별칭을 사용하는 것보다 더 눈에 보이는 정보를한다 :
type SenderName = SenderName of string
type RecipientName = RecipientName of string
type NetworkElement =
| Message of SenderName * RecipietName * string
match netelem with
| Message(SenderName sender, RecipientName recipiet, msg) -> ...
사용 기록 : 이 방법은 명시 적으로 노조 케이스 정보를 전달할 레코드를 정의합니다. 이것은 구문 론적으로 장황 하긴하지만, 아마도 가장 접근하기 쉬운 방식으로 추가 정보를 추가 할 것입니다. 레코드에서 패턴 일치를 계속 사용하거나 도트 표기법을 사용하여 요소에 액세스 할 수 있습니다. 또한 개발하는 동안 새 필드를 추가하는 것이 더 쉽습니다.
type MessageData =
{ SenderName : string; RecipientName : string; Message : string }
type NetworkEvent =
| Message of MessageData
match netelem with
| Message{ SenderName = sender; RecipientName = recipiet; Message = msg} -> ...
F # 3.1에서는 이러한 필드가 이름을 가질 수 있습니다. –
@JamesMoore 네, 저를 행복하게합니다 : D –