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# の測定単位: パート 4、パラメーター化された型

于 2011-07-14T23:51:58.733 に答える