【问题标题】:Units of Measure - reuse method with different units passed inUnits of Measure - 传入不同单位的重用方法
【发布时间】:2011-05-13 03:58:59
【问题描述】:

我有一个名为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&lt;SI.m&gt; -&gt; float&lt;SI.m&gt;/float&lt;SI.s&gt;,这对于速度来说当然是正确的,但是acceleration = 行...然后编译失败,因为它传入了float&lt;SI.m/SI.s&gt;该方法不期望。

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

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

【问题讨论】:

    标签: f# units-of-measurement


    【解决方案1】:
    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>)
    

    【讨论】:

      猜你喜欢
      • 2012-09-14
      • 2013-11-13
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多