从 csv 文件导入数字时,我需要将它们转换为带单位的 float 。
目前我使用内联函数来执行此操作:
data |> List.map float |> List.map (fun n -> n * 1.0<m>)
但我想知道是否有更优雅的方法来做到这一点 - 或者我是否必须创建自己的带有转换函数的“单位”模块?
如果是这样的话,那就太好了,但我怀疑这是否可能......
data |> List.map float |> List.map lift<m>
这与我之前的问题 ( How to generically remove F# Units of measure ) 相反。
更新:对于自制装置,我已经尝试过这个,效果很好:
[<Measure>]
type km =
static member lift (v:float) = v * 1.0<km>
data |> List.map float |> List.map km.lift
或者,按照 this answer 中的问题
data |> List.map (float >> km.lift)
最佳答案
看起来度量单位暂时不能作为类型参数(不知道这是否会改变)。所以最短的写法是:
data |> List.map float |> List.map ((*) 1.0<m>)
编辑
现在另请参阅此处的FloatWithMeasure
http://msdn.microsoft.com/en-us/library/ee806527(VS.100).aspx
关于F# 测量单位 - 'lifting' 值要 float<something>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/419521/