2011-07-14 4 views
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> 

(私は0のためoriginalSizeをチェックする必要がありますが、それは本当にこの質問へのジャーメインではありません実現)。

私が望むのは、inchとdots per inchを処理するためにこの関数をオーバーロードすることです。私は、測定単位に過負荷をかける方法はないと思っていますが、誰かがこれについて何か示唆を持っているかどうかは分かりました。

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

をその後私はfinalSizeとoriginalSizeの測定にチェックを失う:

は、私はこれを行うことができます知っています。 finalSizeとoriginalSizeの尺度が同じであることを保証したいだけです。

どのような提案、考えですか?

答えて

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

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

+0

絶対に素晴らしいです。私は何とかジェネリックを使う必要があると思ったが、まだコードを試してみることはほとんどなかった。おかげでGradbot。 Google+ではまだあなたですか? –

+0

そして私はあなたにそのリンクのためのもう一つのアップヴォートを与えることができたらいいと思う。 :-) –

+0

あなたはgmail.comの私のSOユーザ名としてgoogle +で私を見つけることができます – gradbot