F # Единицы измерения - значения "подъема" для плавания <something>
При импорте чисел из файла csv мне нужно преобразовать их в float с единицей.
В настоящее время я делаю это со встроенной функцией:
data |> List.map float |> List.map (fun n -> n * 1.0<m>)
Но мне интересно, есть ли более элегантный способ сделать это - или мне нужно создать свой собственный модуль с функциями преобразования?
Что было бы действительно хорошо, было бы что-то вроде этого, но я сомневаюсь, что это возможно...
data |> List.map float |> List.map lift<m>
Это противоположность моему предыдущему вопросу (Как полностью удалить единицы измерения F #).
ОБНОВЛЕНИЕ: для домашних устройств я пробовал это, что работает нормально:
[<Measure>]
type km =
static member lift (v:float) = v * 1.0<km>
data |> List.map float |> List.map km.lift
или, после вопроса в этом ответе
data |> List.map (float >> km.lift)
Ответы
Ответ 1
Похоже, что единицы измерения не могут быть параметрами типа на данный момент (не знаю, изменится ли это). Поэтому самый короткий способ написать это:
data |> List.map float |> List.map ((*) 1.0<m>)
ИЗМЕНИТЬ
См. также FloatWithMeasure
здесь
http://msdn.microsoft.com/en-us/library/ee806527(VS.100).aspx
Ответ 2
Есть ли причина, по которой вам приходится дважды сопоставлять карту? Что не так с этим:
data |> List.map (fun x -> (float x) * 1.0<m>)