根据这个问题:F#中度量单位的分数幂,F# 中的度量单位不支持分数幂。
在我的应用程序中,有时考虑带有度量前缀的数据是有益的,例如在处理秒数时。有时我需要以毫秒为单位的结果,有时以秒为单位。
我目前正在考虑使用的替代方法是
[<Measure>] type milli
[<Measure>] type second
let a = 10.0<second>;
let b = 10.0<milli*second>
这给了我:
val a : float<second> = 10.0
val b : float<milli second> = 10.0
现在我想允许使用这两个操作进行计算。所以我可以做
let milliSecondsPerSecond = 1000.0<(milli*second)/second>
let a = 10.0<second>;
let b = 10.0<milli*second>
(a*milliSecondsPerSecond) + b
这正是我想要的
val it : float<milli second> = 10010.0
现在,这一切都很好而且很闪亮,但是当您想要支持多个单位和多个前缀时,它会很快失去控制。所以我认为要么有必要将其烘焙成一个更通用的解决方案,但不知道从哪里开始。我试过
let milliPer<'a> = 1000.0<(milli * 'a) / 'a>
但这不起作用,因为 f# 抱怨并告诉我“非零常量不能有通用单位”......
由于我认为单位前缀是一个常见问题,我想以前有人已经解决了这个问题。有没有更惯用的方法在 F# 中做单位前缀?