4

无论如何定义一个DU,其条款使用通用计量单位?例如

type MyDU =
| A  of int<_>
| B  of float<_>

此代码无法编译,但我可以指定一个常规函数,该函数接受具有通用度量单位的数值:

let f (n : int<_>) = n * n;;
val f : int<'u> -> int<'u ^ 2>

考虑到每个联合子句最终都是一个函数,它将之后指定的类型转换of为私有类型MyDU.A,或者MyDU.B是否有特定原因为什么它适用于函数定义而不是类型定义?

有没有办法在这里做我想做的事?如果没有,我很想知道为什么它也不起作用!

谢谢,

4

1 回答 1

11

您需要使用通用联合 -

type MyDU<[<Measure>] 't> =
    | A  of int<'t>
    | B  of float<'t>

这是因为 a与 aint<m>不同int<s>

请注意,这并不特定于度量类型,它也适用于使用联合创建列表等。

于 2012-08-08T10:33:10.630 回答