f# - single 和 double 不能用度量增加

标签 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

最佳答案

好吧,这里有两个不同的问题:

  • 似乎无符号类型无法通过设计进行注释。我不知道为什么会这样,但是如果您尝试类似 let _ = 1u<1> 之类的操作,您可以获得有关此效果的非常有用的错误消息。 .
  • 由于类型同义词的工作方式,您只能将度量与“真实”类型一起使用,而不能与它们的同义词一起使用。这就是为什么您可以通过 float32 使用度量的原因。和 float ,但不是 singledouble .请注意,int32 也是如此。 , 也。
  • 关于f# - single 和 double 不能用度量增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14130080/

    相关文章:

    arrays - 数组切片的奇怪行为

    xaml - 将事件绑定(bind)到 ItemsControl 中的按钮

    F# 基于类型的度量单位转换

    c++ - "incomplete type"关于使用 C++ 单位 units::compose

    c# - 具有泛型类型约束的泛型方法的尴尬语法

    f# - 如何关闭 Ionide Lint 警告

    performance - 整数运算性能 32 位与 64 位

    f# - F# 中最接近 Haskell GADT 和类型类的是什么?

    java - 不同类型单位的抽象类

    java - JSR 363 添加新单元