Das Problem ist einfach, ich möchte einige Reisekosten berechnen, die beide Ausgaben in DKK und JPY enthalten. So habe ich eine nette Art und Weise gefunden Währung zu modellieren, damit ich bin in der Lage zu konvertieren hin und her:Wie kategorisieren Sie über Maßeinheiten?
[<Measure>] type JPY
[<Measure>] type DKK
type CurrencyRate<[<Measure>]'u, [<Measure>]'v> =
{ Rate: decimal<'u/'v>; Date: System.DateTime}
let sep10 = System.DateTime(2015,9,10)
let DKK_TO_JPY : CurrencyRate<JPY,DKK> =
{ Rate = (1773.65m<JPY>/100m<DKK>); Date = sep10}
let JPY_TO_DKK : CurrencyRate<DKK,JPY> =
{ Rate = (5.36m<DKK>/100.0m<JPY>); Date=sep10 }
Ich gehe Kosten als Satzart
type Expense<[<Measure>] 'a> = {
name: string
quantity: int
amount: decimal<'a>
}
und ich hier ein Beispiel haben zu modellieren Liste der Ausgaben:
let travel_expenses = [
{ name = "flight tickets"; quantity = 1; amount = 5000m<DKK> }
{ name = "shinkansen ->"; quantity = 1; amount = 10000m<JPY> }
{ name = "shinkansen <-"; quantity = 1; amount = 10000m<JPY> }
]
und das ist, wo die Show aufhört ... F # nicht, dass die Liste nicht mag, und Beschwerden, die alle von der Liste DKK sein sollten, macht Sinn -Welche natürlich.
Dann dachte ich, dass es muss eine intelligente Art und Weise sein, eine diskriminierte Vereinigung meiner Einheiten von Maßnahmen, um sie in einer Kategorie zu setzen, und dann mit ich versuchte:
[<Measure>] type Currency = JPY | DKK
Aber dies ist nicht möglich, und Ergebnisse in The kind of the type specified by its attributes does not match the kind implied by its definition
.
Die Lösung, die ich bisher gefunden habe, ist sehr überflüssig, und ich denke, dass es die Maßeinheit ziemlich sinnlos macht.
type Money =
| DKK of decimal<DKK>
| JPY of decimal<JPY>
type Expense = {
name: string
quantity: int
amount: Money
}
let travel_expenses = [
{ name = "flight tickets"; quantity = 1; amount = DKK(5000m<DKK>) }
{ name = "shinkansen ->"; quantity = 1; amount = JPY(10000m<JPY>) }
{ name = "shinkansen <-"; quantity = 1; amount = JPY(10000m<JPY>) }
]
Gibt es eine gute Möglichkeit, mit diesen Einheiten von Maßnahmen als Kategorien zu arbeiten? wie zum Beispiel
[<Measure>] Length = Meter | Feet
[<Measure>] Currency = JPY | DKK | USD
oder soll ich mein Problem umbauen und vielleicht nicht Maßeinheiten benutzen?
zuerst nein: es gibt keine Möglichkeit, das letzte zu tun - aber was Sie tun sollten, ist eine Basiswährung zu wählen und nur die Liste von diesem Typ zu machen - einfach vor dem Hinzufügen konvertieren – Carsten