(Yes, stillplayingwithunits de measure)unités de Réutiliser mesure par rapport à différents types
Je viens de commencer à utiliser les unités de mesure pour autre chose que flotteur pour la première fois. Après avoir démarré compliqué, j'ai découvert que vous pouvez réutiliser des unités de mesure sur plusieurs 'types'.
[<Measure>] type mm
let a = 1<mm>
let b = 1.<mm>
Maintenant, je suis assis ici se demander comment mettre à jour mon type existant mm pour tenir compte de cette possibilité:
[<Measure>]
type mm =
static member perMetre = 1000.0<mm/m>
static member fromMetre (v:float<m>) = v * mm.perMetre
static member toMetre (v:float<mm>) = v/mm.perMetre
static member lift (v:float) = v * 1.0<mm>
La question: Comment puis-je écrire une fonction qui peut convertir mm
à m
(disons) que peut gérer int<mm> -> int<m>
ET float<mm> -> float<m>
?
MISE À JOUR
Merci à Kurt, voici la nouvelle version:
[<Measure>]
type mm =
static member private perMetreFloat = 1000.0<mm/m>
static member private perMetreInt = 1000<mm/m>
[<OverloadIDAttribute("float")>]
static member fromMetre (v:float<m>) = v * mm.perMetreFloat
[<OverloadIDAttribute("float")>]
static member toMetre (v:float<mm>) = v/mm.perMetreFloat
[<OverloadIDAttribute("float")>]
static member lift (v:float) = v * 1.0<mm>
[<OverloadIDAttribute("int")>]
static member fromMetre (v:int<m>) = v * mm.perMetreInt
[<OverloadIDAttribute("int")>]
static member toMetre (v:int<mm>) = v/mm.perMetreInt
[<OverloadIDAttribute("int")>]
static member lift (v:int) = v * 1<mm>
Quelle est la question? – Brian