F#多态性

Rog*_*son 3 .net polymorphism f# records multimethod

在记录类型方面,有没有办法处理F#中的多态?

举一个例子,假设我们有两种记录类型的地址,街道地址和方框地址.我认为,当涉及到行为时,可以在模式匹配中处理它们.但是引用怎么样,有没有办法从其他记录中引用(不是对象引用)两种类型

MiM*_*iMo 10

如果我理解你的问题,我会使用一个有区别的联盟:

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

type Address =
  | StreetAddress of StreetAddress
  | BoxAddress of BoxAddress
Run Code Online (Sandbox Code Playgroud)

然后你可以创建和引用Address值.

如果街道和邮箱地址共享,你可以把它变成一个独立的一些常见的数据BaseAddress记录类型,然后使用内部StreetAddressBoxAddress,或直接使用Address:

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

type Address =
  | StreetAddress of BaseAddress*StreetAddress
  | BoxAddress of BaseAddress*BoxAddress
Run Code Online (Sandbox Code Playgroud)