3

我试图使用该Int32库编写一些代码,但遇到了类型错误:

let x : int = 7;
Int32.abs(x)

This has type:
  int
But somewhere wanted:
  int32

我对此有点惊讶,因为在其他语言int中只是int32.

我的问题是:

  • Reason ML 中可用的整数类型有哪些?
  • 使用它们的准则是什么?
  • 每个都有一个模块吗?(例如,我注意到有Int32.abs但没有Int.abs
4

1 回答 1

8

以下是可用的各种整数数据类型、它们的类型、相关模块和文字语法的比较:

let int       : int       = Pervasives.abs(42);
let int32     : int32     = Int32.abs(42l);
let int64     : int64     = Int64.abs(42L);
let nativeint : nativeint = Nativeint.abs(42n);

请注意,它Pervasives是自动打开的,因此您不需要像上面那样限定其功能。

ìnt在 32 位平台上是原生 31 位,在 64 位平台上是 63 位,除非您需要int32,int64nativeint. In32, Int64, 并且Nativeint都包含这个(或类似的)注释:

性能注意事项:int32 类型的值比 int 类型的值占用更多的内存空间,并且 int32 上的算术运算通常比 int 上的慢。仅当应用程序需要精确的 32 位算术时才使用 int32。

我希望这能回答你的问题。

编辑:当使用 BuckleScript 编译为 JavaScript 时,这在 Reason 中很常见,语义略有不同:

  • int32并且int64表现相同
  • int表现得像int32
  • nativeint大多数情况下被视为类似float,但有少数例外情况更像整数。

来源:https ://bucklescript.github.io/docs/en/difference-from-native-ocaml.html#integers

于 2018-02-17T11:02:00.543 回答