Перегрузка мер F # - PullRequest
3 голосов
/ 15 июля 2011

Рассмотрим следующий код 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 одинаковы.

Есть предложения, мысли?

1 Ответ

8 голосов
/ 15 июля 2011
let scaleCalculation (finalSize:float<'u>) (originalSize:float<'u>) =
   finalSize/originalSize * 100.0<percentage>

Единицы измерения в F #: часть четвертая, параметризованные типы

...