F#措施的重载

Ono*_*cci 3 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>
Run Code Online (Sandbox Code Playgroud)

(我意识到我需要检查originalSize为0,但这并不是真正与这个问题密切相关).

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

我知道我可以这样做:

   let scaleCalculation (finalSize:float) (originalSize:float) =
      finalSize/originalSize * 100.0<percentage>
Run Code Online (Sandbox Code Playgroud)

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

有什么建议,想法?

gra*_*bot 8

let scaleCalculation (finalSize:float<'u>) (originalSize:float<'u>) =
   finalSize/originalSize * 100.0<percentage>
Run Code Online (Sandbox Code Playgroud)

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