单个和双倍不能使用Measure进行扩充

eba*_*und 4 f# units-of-measurement

有谁知道为什么[<Measure>]类型只增加了一些代数类型?如此多的有用类型无法使用Measure进行扩充对我来说很奇怪.

type FooType =
| FooByte       of byte<1>          // Error
| FooSbyte      of sbyte<1>         // Ok
| FooInt16      of int16<1>         // Ok
| FooUint16     of uint16<1>        // Error
| FooInt        of int<1>           // Ok
| FooInt32      of uint32<1>        // Error
| FooInt64      of int64<1>         // Ok
| FooUint64     of uint64<1>        // Error
| FooNativeint  of nativeint<1>     // Error
| FooUnativeint of unativeint<1>    // Error
| FooChar       of char<1>          // Error
| FooDecimal    of decimal<1>       // Ok
| FooFloat32    of float32<1>       // Ok
| FooSingle     of single<1>        // Error
| FooFLoat      of float<1>         // Ok
| FooDouble     of double<1>        // Error
Run Code Online (Sandbox Code Playgroud)

kvb*_*kvb 5

那么,这里有两个不同的问题:

  1. 似乎无符号类型无法通过设计进行注释.我不确定为什么会这样,但是如果你尝试类似的话,你可以得到一个非常丰富的错误信息let _ = 1u<1>.
  2. 由于类型同义词的工作方式,您只能使用"真实"类型的度量而不能使用其同义词.这就是为什么你可以使用float32float,而不是singledouble.请注意,同样也是如此int32.

  • 如果对任何人都不清楚,`float32`和`single`是同样的东西,就像`float`和`double`--所以缺乏单一和双重支持更多的是语义而不是功能. (3认同)