F#度量单位 - '提升'值浮动<something> </something>

时间:2009-01-07 08:01:24

标签: f# units-of-measurement

从csv文件导入数字时,我需要将它们转换为带有单位的浮点数。

目前我使用内联函数执行此操作:

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)

2 个答案:

答案 0 :(得分:2)

看起来测量单位目前不能是类型参数(不知道这是否会改变)。所以写这个的最短路是:

data |> List.map float |> List.map ((*) 1.0<m>)

修改

另请参见此处FloatWithMeasure

http://msdn.microsoft.com/en-us/library/ee806527(VS.100).aspx

答案 1 :(得分:1)

你有两次必须映射的原因吗?这有什么问题:

data |> List.map (fun x -> (float x) * 1.0<m>)