为什么我不能将单位的参数传递给F#类型?

时间:2010-11-10 19:17:33

标签: f# constructor units-of-measurement

假设我已经定义了一个度量单位:

[<Measure>] type Blob

我想要一个以Blobs /秒为值的类型作为构造函数参数:

type Something(flowRate:double<Blob/s>) = ...

F#在这上面摇摆不定 - “double不期望任何类型的参数,但这里给出了1种类型的参数”

我理解这条消息。我曾经认为我试图做的很明显,但我承认语法可能是错误的。问题是,我如何在代码中表达这种关系?

1 个答案:

答案 0 :(得分:8)

正如消息(类型)所示,双打不是度量通用的。请尝试使用float<Blob/s>。这有点奇怪,因为float是类型double的类型同义词。但是,类型float<[<Measure>]'t>在某些方面是它自己的单独类型。 singlefloat32int32int以及int8byte的问题类似。 Section 9.7 of the spec部分涵盖了这些信息。

这是特别令人困惑的,因为你无法定义自己的类型,这些类型只有它们的衡量标准不同:

type T = class end
type T<[<Measure>]'t> = class end //' Duplicate definition of type T