レコード型に関して F# でポリモーフィズムを処理する方法はありますか?
例を挙げると、番地の住所とボックスの住所の 2 つのレコード タイプの住所があるとします。振る舞いに関しては、パターンマッチングで対処できると思います。しかし、参照についてはどうですか、他のレコードから両方のタイプを参照する(オブジェクト参照を意味するのではなく)方法はありますか
レコード型に関して F# でポリモーフィズムを処理する方法はありますか?
例を挙げると、番地の住所とボックスの住所の 2 つのレコード タイプの住所があるとします。振る舞いに関しては、パターンマッチングで対処できると思います。しかし、参照についてはどうですか、他のレコードから両方のタイプを参照する(オブジェクト参照を意味するのではなく)方法はありますか
あなたの質問を正しく理解できれば、差別組合を使用します。
type StreetAddress = {. . . }
type BoxAddress = {. . .}
type Address =
| StreetAddress of StreetAddress
| BoxAddress of BoxAddress
その後、値を作成して参照できAddress
ます。
BaseAddress
番地と住所が共通のデータを共有している場合は、別のレコード タイプに入れることができます。これは、 と の内部StreetAddress
でBoxAddress
使用されるか、 で直接使用されAddress
ます。
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}
実際に作成することができ、おそらくあなたが望むものです