1

所以,我试图以各种方式解决这个问题,但我就是无法做到这一点。

有没有办法制作一个包含不同测量单位值的列表(全部基于浮点数)?例如:

let myList = [0.07<ms>; 0.9; 7.2<mm>;]

由于它们被视为不同的类型,因此您不能将它们放在同一个列表中。我尝试将列表声明为let myList : float<_> list = ...,并为无量纲数字提供一个度量单位,但我仍然遇到输入错误:期待 float<'u> 但得到了浮动。

我无法使用元组/n-ple,因为我不知道列表中的值的数量。

我对 F# 很陌生,并且花了很长时间在存储上搜索文档和 Web,但还没有找到解决方案。如果有人能指出我正确的方向,我将不胜感激。谢谢!

4

2 回答 2

4

我认为你需要给出一个更长的例子来说明你想如何使用这个列表。否则很难给出一个好的答案,因为这取决于用途。

如果您只想创建一个代表不同事物的数字列表,那么您可以考虑使用有区别的联合来区分它们:

type Numeric =
  | Length of float<mm>
  | Time of float<ms>
  | Unitless of float

let myList = [ Time 0.07<ms>; Unitless 0.9; Length 7.2<mm>;]

然后您可以创建一个包含不同数字(具有不同物理含义)的列表。遍历列表时,您需要使用模式匹配来提取值。

或者,您可以在创建列表时删除所有单位,但随后您将失去计量单位提供的保证(这意味着当您从列表中获得一些值时,您将不知道它有什么单位并且您可以解释它错):

let myList = [ float 0.07<ms>; 0.9; float 7.2<mm>;]

您还可以使用F# 库,让您在运行时跟踪单元

于 2012-11-26T15:17:44.043 回答
1

列表的所有成员必须具有相同的类型。Afloat<ms>与 a 不同float<mm>

于 2012-11-26T15:01:22.257 回答