关于记录类型,有什么方法可以处理F#中的多态性吗?

仅举一个例子,可以说我们有两种记录类型的地址,街道地址和邮箱地址。
我认为在行为方面可以通过模式匹配来处理它们。
但是关于引用,有什么方法可以从其他记录中引用(不意味着对象引用)这两种类型

最佳答案

如果我正确理解了您的问题,我将使用有区别的联合:

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

10-08 12:46