F#識別されたユニオンインスタンスをパターンマッチングで比較する
-
12-12-2019 - |
質問
最初に、貧しいタイトルの謝罪 - 私は問題をよりよく説明するのに十分な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"
. 所属していません StackOverflow