我试图使用该Int32
库编写一些代码,但遇到了类型错误:
let x : int = 7;
Int32.abs(x)
This has type:
int
But somewhere wanted:
int32
我对此有点惊讶,因为在其他语言int
中只是int32
.
我的问题是:
- Reason ML 中可用的整数类型有哪些?
- 使用它们的准则是什么?
- 每个都有一个模块吗?(例如,我注意到有
Int32.abs
但没有Int.abs
)
以下是可用的各种整数数据类型、它们的类型、相关模块和文字语法的比较:
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
,int64
或nativeint
. 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