레코드 유형과 관련하여 F #에서 다형성을 처리 할 수있는 방법이 있습니까?F # 다형성
예를 들어 두 가지 레코드 유형의 주소, 거리 주소 및 상자 주소가 있다고 가정 해 보겠습니다. 나는 행동과 관련하여 패턴 매칭에서 그것들을 다룰 수 있다고 생각한다. 하지만,
레코드 유형과 관련하여 F #에서 다형성을 처리 할 수있는 방법이 있습니까?F # 다형성
예를 들어 두 가지 레코드 유형의 주소, 거리 주소 및 상자 주소가 있다고 가정 해 보겠습니다. 나는 행동과 관련하여 패턴 매칭에서 그것들을 다룰 수 있다고 생각한다. 하지만,
을 원하는 아마도 수 있습니다
type StreetAddress = {. . . }
type BoxAddress = {. . .}
type Address =
| StreetAddress of StreetAddress
| BoxAddress of BoxAddress
을하고 당신에게 Address
값을 만들고 참조 할 수 있습니다.
하면 거리와 상자 주소 공유 별도의 BaseAddress
레코드 유형에 넣어 수있는 몇 가지 일반적인 데이터, 즉 Address
에 의해 다음 StreetAddress
및 BoxAddress
내에서 사용, 또는 직접 사용됩니다
type BaseAddress = {. . . }
type StreetAddress = {. . . }
type BoxAddress = {. . .}
type Address =
| StreetAddress of BaseAddress*StreetAddress
| BoxAddress of BaseAddress*BoxAddress
그래서 난 당신이
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}
실제로 생성하고 내가 제대로 질문을 이해한다면 당신은 내가 차별 노동 조합 사용하십시오
당신은 생각해야 SML - 실제로 값 재귀가 금지됩니다. F # (및 OCaml)에서는 다음과 같이 잘 컴파일됩니다. http://gist.github.com/3098571 – t0yv0