2010-11-20 107 views
2

我有一个方法,名为RateOfChange,它采用两个相隔一秒的值并返回结果。度量单位 - 重复使用不同单位的方法

对于两个位置,它返回速度,对于两个速度,它返回加速,它返回焦耳两个能量值/秒等

这在物理上是可能的,但测量单位不要让我做 - 在第一次使用该方法contrained到指定类型:

let RateOfChangeWithTime (value1, value2) = (value2 - value1)/1.0<SI.s> 

let velocity = RateOfChangeWithTime(2.0<SI.m>, 1.0<SI.m>) 
let acceleration = RateOfChangeWithTime(3.0<SI.m/SI.s>, 2.0<SI.m/SI.s>) 

velocity =则此方法被限制为float<SI.m> -> float<SI.m>/float<SI.s>,这当然是正确的速度的线路,但线路acceleration = ...然后编译不通,因为它传递的是float<SI.m/SI.s>哪个方法没有指望。

我希望RateOfChangeWithTime对传入的类型不变,但只是返回已除以秒的度量单位。

这似乎更符合真实的生活情况,这可能吗? (我想一个更复杂的情况下做到这一点 - 在这里看到(http://taumuon-jabuka.blogspot.com/2010/11/f-units-of-measure-with-reactive.html

回答

6
let RateOfChangeWithTime (value1: float<_>, value2: float<_>) = (value2 - value1)/1.0<SI.s> 

let velocity = RateOfChangeWithTime(2.0<SI.m>, 1.0<SI.m>) 
let acceleration = RateOfChangeWithTime(3.0<SI.m/SI.s>, 2.0<SI.m/SI.s>) 
+0

令人惊叹,非常感谢您的答复;-) – 2010-11-21 11:45:14