2009-01-07 7 views
3

Lors de l'importation de nombres à partir d'un fichier csv, j'ai besoin de les convertir en flotteurs avec unité.F # Unités de mesure - 'levage' des valeurs à flotter <something>

Actuellement, je le fais avec une fonction en ligne:

data |> List.map float |> List.map (fun n -> n * 1.0<m>) 

Mais je me demande s'il y a un moyen de faire plus élégant cela - ou dois-je créer mon propre module « unités » avec conversion les fonctions?

Ce qui serait vraiment bien serait quelque chose comme ça, mais je doute qu'il est possible ...

data |> List.map float |> List.map lift<m> 

C'est à l'opposé de ma question précédente (How to generically remove F# Units of measure).

MISE À JOUR: Pour les unités maison, je l'ai essayé, qui fonctionne bien:

[<Measure>] 
type km = 
    static member lift (v:float) = v * 1.0<km> 

data |> List.map float |> List.map km.lift 

ou, suite à la question this answer

data |> List.map (float >> km.lift) 

Répondre

2

On dirait que les unités de mesure peuvent » t être des paramètres de type pour le moment (aucune idée si cela va changer). Ainsi, le chemin le plus court à écrire c'est:

data |> List.map float |> List.map ((*) 1.0<m>) 

EDIT

Voir aussi maintenant FloatWithMeasure ici

http://msdn.microsoft.com/en-us/library/ee806527(VS.100).aspx

+0

Étant donné que les unités sont purement à la compilation, il ne semble pas susceptible de changer. –

+0

FloatWithMeasure m'a juste sauvé de beaucoup de cheveux en tirant, merci :) –

1

Y at-il des raisons pour lesquelles vous avez à la carte deux fois? Quel est le problème avec cela:

data |> List.map (fun x -> (float x) * 1.0<m>) 
+0

Ouais, je pourrais, l'ai fait, mais l'idée était que ma fonction de levage serait généralement applicable aux flotteurs. Mais voir le code corrigé dans UPDATE en question. – Benjol

Questions connexes