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

任何建议,想法?

最佳答案

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

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

关于f# - F# 措施的重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6701140/

10-10 13:16