2

我有一个名为 的方法,RateOfChange它采用相隔一秒读取的两个值,并返回结果。

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

这在物理上是可能的,但度量单位不允许我这样做 - 在第一次使用时,该方法被限制为指定类型:

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>该方法不期望的 a 。

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

这似乎更符合实际生活情况,这可能吗?(我正在尝试针对更复杂的场景执行此操作 - 请参见此处(http://taumuon-jabuka.blogspot.com/2010/11/f-units-of-measure-with-reactive.html

4

1 回答 1

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>)
于 2010-11-20T18:35:24.833 回答