F# unidades de medida - 'levantando' valores para flutuar
-
03-07-2019 - |
Pergunta
Ao importar números de um arquivo CSV, preciso convertê -los para flutuar com a unidade.
Atualmente faço isso com uma função embutida:
data |> List.map float |> List.map (fun n -> n * 1.0<m>)
Mas estou me perguntando se existe uma maneira mais elegante de fazer isso - ou tenho que criar meu próprio módulo 'unidades' com funções de conversão?
O que seria muito bom seria algo assim, mas duvido que seja possível ...
data |> List.map float |> List.map lift<m>
Este é o oposto da minha pergunta anterior (Como remover genericamente as unidades de medida F#).
ATUALIZAÇÃO: Para unidades caseiras, eu tentei isso, o que funciona bem:
[<Measure>]
type km =
static member lift (v:float) = v * 1.0<km>
data |> List.map float |> List.map km.lift
ou, seguindo a pergunta em esta resposta
data |> List.map (float >> km.lift)
Solução
Parece que as unidades de medida não podem ser parâmetros de tipo no momento (não faço ideia se isso mudará). Portanto, a maneira mais curta de escrever isso é:
data |> List.map float |> List.map ((*) 1.0<m>)
EDITAR
Veja também agora FloatWithMeasure
aqui
http://msdn.microsoft.com/en-us/library/ee806527(vs.100).aspx
Outras dicas
Existe alguma razão para que você tenha que mapear duas vezes? O que há de errado com isso:
data |> List.map (fun x -> (float x) * 1.0<m>)