我想定义一个受歧视联盟的所有成员共享的方法。目前,我已经像这样实现了它,但是看起来确实不太优雅-当然有更好的方法。有什么建议吗?
type A =
{AData:string}
member this.SharedMethod (x:float) : int= ...
type B =
{BData:float}
member this.SharedMethod (x:float) : int= ...
type AB =
| A of A
| B of B
let CallSharedMethod (ab:AB) x =
match ab with
| AB.A(a') -> a'.SharedMethod x
| AB.B(b') -> b'.SharedMethod x
最佳答案
那这样的东西呢?
type AB =
| A of string
| B of float
member self.SharedMethod (x : float) =
match self with
| A s -> x
| B f -> f + x
假定您希望求和类型的每个变体(也称为区别联合)对float参数做不同的事情。
对于
A
的情况,我只返回原始值,因为我无能为力了(因为string
和float
之间通常没有有用的关系产生float
)。