首先,为糟糕的标题道歉——我对 F# 的理解不足以更好地描述这个问题。
考虑这个简单的 DU:
type Money =
| USD of decimal
| GBP of decimal
| EUR of decimal
static member (+) (first: Money, second: Money) =
match first, second with
| USD(x), USD(y) -> USD(x + y)
| GBP(x), GBP(y) -> GBP(x + y)
| EUR(x), EUR(y) -> EUR(x + y)
| _ -> failwith "Different currencies"
我用不同的货币表示货币,并重载 (+) 运算符,以便我可以安全地执行 Money + Money。但是,如果我有很多货币,那么匹配语句将变得乏味。有没有办法表达类似的东西:
match first, second with
| _(x), _(y) -> _(x + y)
还是有不同的方法可以达到相同的结果?由于此处描述的限制,我已经考虑并放弃了计量单位。