F# Messeinheiten - 'Heben' Werte zum Schweben
-
03-07-2019 - |
Frage
Beim Importieren von Nummern aus einer CSV -Datei muss ich sie in Schwimmkörper mit Einheit konvertieren.
Derzeit mache ich das mit einer Inline -Funktion:
data |> List.map float |> List.map (fun n -> n * 1.0<m>)
Aber ich frage mich, ob es eine elegantere Möglichkeit gibt, dies zu tun - oder muss ich mein eigenes "Einheiten" -Modul mit Konvertierungsfunktionen erstellen?
Was wirklich schön wäre, wäre so etwas, aber ich bezweifle, dass es möglich ist ...
data |> List.map float |> List.map lift<m>
Dies ist das Gegenteil meiner vorherigen Frage (So entfernen Sie allgemein F# -Messeinheiten).
Update: Für hausgemachte Einheiten habe ich dies ausprobiert, was in Ordnung funktioniert:
[<Measure>]
type km =
static member lift (v:float) = v * 1.0<km>
data |> List.map float |> List.map km.lift
oder folgen der Frage in Diese Antwort
data |> List.map (float >> km.lift)
Lösung
Es sieht so aus, als ob Einheiten von Maßern nicht für den Moment Typparameter sein können (keine Ahnung, ob sich dies ändert). Der kürzeste Weg, dies zu schreiben, ist also:
data |> List.map float |> List.map ((*) 1.0<m>)
BEARBEITEN
Siehe auch jetzt FloatWithMeasure
hier
http://msdn.microsoft.com/en-us/library/ee806527(vs.100).aspx
Andere Tipps
Gibt es einen Grund, warum Sie zweimal kartieren müssen? Was ist los daran:
data |> List.map (fun x -> (float x) * 1.0<m>)