In primo luogo, scuse per il titolo scarso - Non capisco abbastanza F # per descrivere meglio il problema.Confronto tra istanze di unione discriminata F # tramite corrispondenza di pattern
considerare 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 rappresentando denaro in diverse valute, e sovraccarico l'operatore (+) in modo che posso tranquillamente fare soldi + soldi. Tuttavia, se ho molte valute, la dichiarazione della partita diventerà noiosa da scrivere. C'è un modo per esprimere qualcosa del tipo:
match first, second with
| _(x), _(y) -> _(x + y)
Oppure esiste un modo diverso per ottenere lo stesso risultato? Ho considerato e scartato le unità di misura a causa delle limitazioni descritte here.
Non dovresti utilizzare le unità di misura per questo in F #? –
Mi piacerebbe utilizzare le unità di misura, ma poiché la misura viene cancellata in fase di esecuzione non mi offre alcuna sicurezza durante la lettura dei dati da fonti esterne (vedi domanda collegata). Mi piacerebbe essere smentito! – Akash