3

レコード型に関して F# でポリモーフィズムを処理する方法はありますか?

例を挙げると、番地の住所とボックスの住所の 2 つのレコード タイプの住所があるとします。振る舞いに関しては、パターンマッチングで対処できると思います。しかし、参照についてはどうですか、他のレコードから両方のタイプを参照する(オブジェクト参照を意味するのではなく)方法はありますか

4

2 に答える 2

10

あなたの質問を正しく理解できれば、差別組合を使用します。

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

type Address =
  | StreetAddress of StreetAddress
  | BoxAddress of BoxAddress

その後、値を作成して参照できAddressます。

BaseAddress番地と住所が共通のデータを共有している場合は、別のレコード タイプに入れることができます。これは、 と の内部StreetAddressBoxAddress使用されるか、 で直接使用されAddressます。

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

type Address =
  | StreetAddress of BaseAddress*StreetAddress
  | BoxAddress of BaseAddress*BoxAddress
于 2012-07-12T12:07:59.693 に答える
-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}

実際に作成することができ、おそらくあなたが望むものです

于 2012-07-12T11:26:12.603 に答える