此问题与 F# units of measure 相关.
我应该为我正在使用的单元强制执行类型吗?
例如,我应该强制要求秒始终是 float 吗?
let asSeconds time = float(time)*1.0<second>
这似乎有点限制,因为 NASA 可能想使用十进制。另一方面,我不知道如何转换通用 a'
成一个单元a'<seconds>
。我面临的问题是一些应用程序级别的函数不使用单位,但一些库的东西确实使用单位。
附注这与我的previous question有轻微关系
最佳答案
should I enforce that seconds are always a float?
我认为您无法真正强制执行此操作,因为测量单位本质上并不与特定的数字类型相关。例如,以下两者都是合法的:
let a = 1<second> // a : int<second>
let b = 1.0<second> // b : float<second>
I don't know how to convert a generic
'a
into a unit'a<seconds>
.
这是一个有趣的问题,但我认为不可能编写 asSeconds
的通用版本,因为度量单位只能应用于文字,而文字在 F# 中从来都不是通用的。所以你不能写time<second>
或time * GenericOne<second>
.
底线,从无量纲值转换为有量纲值时,您必须选择特定的数字类型,例如 float
。但这并不意味着您可以强制该 UOM 的所有值都具有该数字类型。
关于f# - 我应该强制使用 F# 测量单位的类型吗? [风格与一般性],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71642273/