撇开我们是否应该使用的测量单位,像角无单位的概念,假设我有定义degree
和radian
单位在F#如何在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#中度量单位的扩展成员的语法技巧,还是支持的功能?
我会冒险猜测它不被支持。我试过的所有东西都给出了错误:'度量声明可能只有静态成员'。 – Daniel
问题是编译后删除了度量类型信息,所以在运行时一切都只是一个'float',因此调用一个实例方法没有意义 –
@jpalmer。在编译期间,扩展成员是静态解析的。 –