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)
War es hilfreich?

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>)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top