Не говоря уже о том, должны ли мы использовать единицы измерения для безразмерных понятий, таких как углы, предположим, что я определил degree
и radian
единицы измерения в F#.
type [<Measure>] degree =
static member ToRadians (d:float<degree>) : float<radian> = d * (Math.PI * 1.<radian>) / 180.0<degree>
and [<Measure>] radian =
static member ToDegrees (r:float<radian>) : float<degree> = r * 180.0<degree> / (Math.PI * 1.<radian>)
Я могу использовать их относительно легко, как
4.0<degree> |> degree.ToRadians
Кажется, что члены расширения были бы еще удобнее. Так что я мог бы просто сказать
let d = 4.0<degree>
let r = d.ToRadians()
Но я не могу определить член расширения очевидным образом
type float<degree> with
member degrees.ToRadians() = degree.ToRadians(degrees)
... это вызывает у меня следующую ошибку
error FS0010: Unexpected identifier in type name. Expected infix operator, quote symbol or other token.
Есть ли синтаксический трюк для членов расширения в единицах измерения в F# или поддерживается ли эта функция?
Measure declarations may have only static members
. - person Daniel   schedule 23.08.2011float
, поэтому вызов метода экземпляра не имеет смысла. - person John Palmer   schedule 23.08.2011floats
- person John Palmer   schedule 23.08.2011