F#措施的重载

时间:2011-07-14 23:24:30

标签: f# overloading measures

考虑以下F#代码:

[<Measure>] type pixel
[<Measure>] type inch
[<Measure>] type dot
[<Measure>] type percentage

let scaleCalculation (finalSize:float<pixel>) (originalSize:float<pixel>) =
   finalSize/originalSize * 100.0<percentage>

(我知道我需要检查originalSize是否为0,但这不是真正的问题)。

我想要的是重载此功能以处理每英寸的英寸和点数。我不认为有任何方法可以超出计量单位,但我只是想我会看到是否有人对此有任何建议。

我知道我可以这样做:

   let scaleCalculation (finalSize:float) (originalSize:float) =
      finalSize/originalSize * 100.0<percentage>

然后我失去了对finalSize和originalSize的测量的检查。我只想确保finalSize和originalSize的度量相同。

有什么建议,想法吗?

1 个答案:

答案 0 :(得分:8)

let scaleCalculation (finalSize:float<'u>) (originalSize:float<'u>) =
   finalSize/originalSize * 100.0<percentage>

Units of Measure in F#: Part Four, Parameterized Types