Domanda

In primo luogo, scuse per il titolo povero - non capisco abbastanza F # per descrivere il problema meglio.

Considera questo semplice 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"
.

Sto raffigurando denaro in diverse valute e sovraccaricare l'operatore (+) in modo che io possa tranquillamente fare soldi + soldi.Tuttavia, se ho molte valute, allora la dichiarazione della partita diventerà noiosa scrivere.C'è un modo per esprimere qualcosa come:

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

o c'è un modo diverso per raggiungere lo stesso risultato?Ho considerato e scartato le unità di misura dovute alle limitazioni descritte qui .

È stato utile?

Soluzione

funziona per te?

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" 
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top