【发布时间】:2012-11-29 02:42:24
【问题描述】:
我正在学习 F# - 目前正在研究计量单位。我有一个返回米/秒的简单计算,我想介绍一个将其转换为每小时公里数的函数。
我的代码如下所示:
[<Measure>] type kg
[<Measure>] type s
[<Measure>] type m
[<Measure>] type km
[<Measure>] type h
let msToKmph(speed : float<m/s>) =
(float speed) * 3.6<km/h>
let gravityOnEarth = 9.81<m/s^2>
let heightOfJump = 3.5<m>
let speedOfImpact = sqrt (2.0 * gravityOnEarth * heightOfJump)
let speedOfImpactKmh = msToKmph(speedOfImpact)
这行得通 - 我得到 8.28673639 m/s 和 29.832251 km/h。我不确定这是否是表达不同单位之间关系的最佳方式。这可以更优雅地完成吗?
例如,行(浮动速度)从速度参数中删除单位信息,以使 msToKmph 返回 km/h。如果我在计算之前没有删除单位信息,返回的单位是:km m/(h s)
【问题讨论】:
-
您可能希望将此发布到 CodeReview 堆栈交换。 codereview.stackexchange.com 除此之外,我认为您的方法很好。
-
我自己没有使用过它们,但我会使用适当的单位(例如
let mToKm(length: float<m>) = length * 0.001<km/m>)表示的比率定义相同“类型”(例如长度)的单位之间的转换函数,然后基于这些简单的转化建立其他转化。