我试着使用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
会自动打开,因此您无需像上面那样限定其函数。int
本地为31位,在64位平台上为63位,除非需要int32
、int64
或nativeint
提供的精确算术语义,否则应使用该类型。 In32
、Int64
和Nativeint
都包含这个(或类似的)说明:
希望这回答了你的问题。 编辑:在使用BuckleScript编译为JavaScript时(这在Reason中很常见),语义略有不同:性能提示:类型为int32的值占用比类型为int的值更多的内存空间,并且对int32的算术运算通常比对int的算术运算慢。仅当应用程序需要精确的32位算术时才使用int32。
int32
和int64
的行为相同int
的行为类似于int32
nativeint
大多像float
一样处理,但有一些例外,更像整数。
int
类型有31位,在64位平台上有63位。缺失的一位是GC所需的标记位,它使得无盒表示成为可能。 - Andreas Rossberg