如何在F#中创建一个具有静态成员New的Measure Type,该成员可以接受一个值并为布尔值生成给定的Measure Type?
我已经用于int、int64和decimal,这些都运行得很完美。
[<Measure>] type MyInt = static member New value = value * 1<MyInt>
[<Measure>] type MyInt64 = static member New value = value * 1L<MyInt64>
[<Measure>] type MyDecimal = static member New value = value * 1m<MyDecimal>
但是这个不起作用:
[<Measure>] type MyBool = static member New value = value * true<MyBool>
编译错误是
意外的标记'>'或不完整的表达式
我也遇到了这个问题,包括字符串和日期时间。我的目标是基本使用度量类型提供编译时检查,而不需要单个案例联合类型包装的运行时性能损失。(有关参考,请参见Jack P.的此答案)理想情况下,我希望将此概念用于所有类型,但我不知道如何处理非数字类型。
LanguagePrimitives.GenericOne
不就等于所有的new
函数吗?- 至少数值类型是这样,布尔类型还没有测试。 - John Palmer1<MyInt>
替换为GenericOne
,但这并没有返回一个int<MyInt>
,而只是返回了int
。我尝试将1<MyInt>
替换为GenericOne<MyInt>
,但编译器报错Expected type, not unit-of-measure
。 - Aaron Palmer1<_>
进行单位转换的乘法可以很好地替换为类似于LanguagePrimitives.Int32WithMeasure<MyInt> 17
的内容。 - Anton Schwaighofer