質問

最初に、貧しいタイトルの謝罪 - 私は問題をよりよく説明するのに十分な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"
.

私は異なる通貨でお金を表し、そして私が安全にお金を稼ぐことができるように(+)演算子を過負荷にしています。しかし、私が多くの通貨を持っているならば、試合書は書くために面倒になるでしょう。のようなものを表現する方法はありますか

match first, second with 
| _(x), _(y) -> _(x + y)
.

または同じ結果を達成するためのさまざまな方法はありますか?記載されている制限により、測定単位を検討し、廃棄しました。">ここに

役に立ちましたか?

解決

あなたのためにこの作業をしますか?

type Kind = | USD | GBP | EUR

type Money = 
    | Money of Kind * decimal 
    static member (+) (first: Money, second: Money) = 
        match first, second with  
        | Money(k1,x), Money(k2,y) when k1=k2 -> Money(k1, x + y) 
        | _ -> failwith "Different currencies" 
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top