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)
Foi útil?

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>)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top