F # Unidades de medida: valores de 'elevación' para flotar < algo >
-
03-07-2019 - |
Pregunta
Al importar números desde un archivo csv, necesito convertirlos a flotadores con la unidad.
Actualmente hago esto con una función en línea:
data |> List.map float |> List.map (fun n -> n * 1.0<m>)
Pero me pregunto si hay una forma más elegante de hacerlo, ¿o tengo que crear mi propio módulo de 'unidades' con funciones de conversión?
Lo que sería realmente bueno sería algo como esto, pero dudo que sea posible ...
data |> List.map float |> List.map lift<m>
Esto es lo contrario de mi pregunta anterior ( How para eliminar genéricamente F # Unidades de medida ).
ACTUALIZACIÓN: para unidades caseras, he intentado esto, que funciona bien:
[<Measure>]
type km =
static member lift (v:float) = v * 1.0<km>
data |> List.map float |> List.map km.lift
o, siguiendo la pregunta en esta respuesta ??a >
data |> List.map (float >> km.lift)
Solución
Parece que las unidades de medida no pueden ser parámetros de tipo por el momento (no tengo idea si esto cambiará). Así que la forma más corta de escribir esto es:
data |> List.map float |> List.map ((*) 1.0<m>)
EDIT
Vea también ahora FloatWithMeasure
aquí
http://msdn.microsoft.com/ en-us / library / ee806527 (VS.100) .aspx
Otros consejos
¿Hay alguna razón por la que tenga que mapear dos veces? ¿Qué está mal con esto:
data |> List.map (fun x -> (float x) * 1.0<m>)