2012-07-12 3 views
2

레코드 유형과 관련하여 F #에서 다형성을 처리 할 수있는 방법이 있습니까?F # 다형성

예를 들어 두 가지 레코드 유형의 주소, 거리 주소 및 상자 주소가 있다고 가정 해 보겠습니다. 나는 행동과 관련하여 패턴 매칭에서 그것들을 다룰 수 있다고 생각한다. 하지만,

답변

8

을 원하는 아마도 수 있습니다

type StreetAddress = {. . . } 
type BoxAddress = {. . .} 

type Address = 
    | StreetAddress of StreetAddress 
    | BoxAddress of BoxAddress 

을하고 당신에게 Address 값을 만들고 참조 할 수 있습니다.

하면 거리와 상자 주소 공유 별도의 BaseAddress 레코드 유형에 넣어 수있는 몇 가지 일반적인 데이터, 즉 Address에 의해 다음 StreetAddressBoxAddress 내에서 사용, 또는 직접 사용됩니다

type BaseAddress = {. . . } 
type StreetAddress = {. . . } 
type BoxAddress = {. . .} 

type Address = 
    | StreetAddress of BaseAddress*StreetAddress 
    | BoxAddress of BaseAddress*BoxAddress 
-2

그래서 난 당신이

type A = {aval:int;b:B} 
and B = {bval:int;a:A} 

이제이 정의 것 같은 것을 만들 수 있도록하려는 생각 다른 기록에서 (개체의 심판을 의미하지 않음) 두 가지 유형을 참조 할 수있는 방법은 참조에 대한 어떤이 컴파일은 잘되지만 레코드가 일정하고 필요한 재귀 구조를 만들 수 없으므로 실제로는 만들 수 없습니다. 그러나, 뭔가 같은

type A = {aval:int;b:B option} 
and B = {bval:int;a:A option} 

실제로 생성하고 내가 제대로 질문을 이해한다면 당신은 내가 차별 노동 조합 사용하십시오

+1

당신은 생각해야 SML - 실제로 값 재귀가 금지됩니다. F # (및 OCaml)에서는 다음과 같이 잘 컴파일됩니다. http://gist.github.com/3098571 – t0yv0