F # Unités de mesure - Valeurs "élévatrices" pour faire flotter < quelque chose >

StackOverflow https://stackoverflow.com/questions/419521

  •  03-07-2019
  •  | 
  •  

Question

Lors de l'importation de numéros à partir d'un fichier csv, je dois les convertir en nombres flottants avec l'unité.

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 existe un moyen plus élégant de le faire - ou dois-je créer mon propre module "unités" avec des fonctions de conversion?

Ce qui serait vraiment bien serait quelque chose comme ça, mais je doute que ce soit possible ...

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

C’est le contraire de ma question précédente ( Comment supprimer génériquement F # Unités de mesure ).

UPDATE: Pour les unités faites à la maison, j'ai déjà essayé cette méthode qui fonctionne bien:

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

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

ou, en suivant la question dans cette réponse

data |> List.map (float >> km.lift)
Était-ce utile?

La solution

Il semble que les unités de mesure ne peuvent pas être des paramètres de type pour le moment (aucune idée si cela changera). Le moyen le plus rapide d’écrire ceci est donc:

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

Autres conseils

Y a-t-il une raison pour laquelle vous devez cartographier deux fois? Quel est le problème avec ceci:

data |> List.map (fun x -> (float x) * 1.0<m>)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top