相关疑难解决方法(0)

通过模式匹配比较F#区分联合实例

首先,为糟糕的头衔道歉 - 我不太了解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"
Run Code Online (Sandbox Code Playgroud)

我用不同的货币代表货币,并超载(+)运营商,以便我可以安全地做Money + Money.但是,如果我有很多货币,那么匹配声明将变得乏味.有没有办法表达如下:

match first, second with 
| _(x), _(y) -> _(x + y)
Run Code Online (Sandbox Code Playgroud)

或者有不同的方法来实现相同的结果?由于此处描述的限制,我已经考虑并放弃了计量单位.

f# pattern-matching discriminated-union

5
推荐指数
1
解决办法
540
查看次数

F#和负面匹配

我有一个歧视类型:

type Item =
    | Normal of string * float32
    | Special1 of Item
    | Special2 of Item
Run Code Online (Sandbox Code Playgroud)

我有一个使用这种类型的功能:

let rec calcItem (i: Item ) =
    match i with
    | Normal(_, p) -> p
    | Special1(g) | Special2(g) -> (calcItem g) + 1
Run Code Online (Sandbox Code Playgroud)

在我的情况下,Special_ ñ类型将在相同的形式进行定义.所以我想知道是否可以使用通配符模式来匹配所有这些类型.该_比赛是不行的,因为它不接受参数.

f# pattern-matching

2
推荐指数
2
解决办法
416
查看次数

标签 统计

f# ×2

pattern-matching ×2

discriminated-union ×1