我对 F# 非常陌生,对度量单位功能很感兴趣,并且对它的正常工作方式有一个粗略的了解,但想知道是否可以将度量绑定(bind)到我们不知道度量将是什么的值直到代码执行?
我正在查看的实际示例是将浮点数绑定(bind)为货币值,其中度量单位是从数据库查找中推断出来的。
让我们假设每种货币(美元、欧元、澳元等)的度量都正常声明:
[<Measure>] USD
[<Measure>] EUR
[<Measure>] AUD
...
首先,您需要一种从标识符获取度量类型的方法,理想情况下,度量名称本身作为货币代码最有可能作为 3 个字符的字符串存储和检索(类似于
Enum.Parse()
)。然后,您需要一种将浮点值绑定(bind)到上一步中创建的类型的方法。
这是可能的,还是有另一种方法可以达到相同的结果?
最佳答案
这是不可能的,因为 F# 度量单位被删除(它们仅在编译时存在)。
您可以编写一个带有运行时实现的库(我还没有想过设计会是什么样子)。但是您可能会丢失静态检查。
我认为可能更好的策略可能是隔离边界,并在边界点(从数据库中读取并推断单元类型)以某种方式将正确的类型放入类型系统,但这取决于代码的结构和你到底在做什么,这可能或不可能/容易......
关于F#:可以在运行时动态绑定(bind)度量单位吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4140247/