3

考虑以下 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 的度量是相同的。

有什么建议,想法吗?

4

1 回答 1

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

F# 中的度量单位:第四部分,参数化类型

于 2011-07-14T23:51:58.733 回答