作者:奋斗的小鸟 | 来源:互联网 | 2022-12-27 15:45
我试图使用Int32
库编写一些代码,但我遇到了类型错误:
let x : int = 7;
Int32.abs(x)
This has type:
int
But somewhere wanted:
int32
我对此感到有些惊讶,因为在其他语言int
中只是一个别名int32
.
我的问题是:
Reason ML中可用的整数类型是什么?
使用它们的准则是什么?
每个都有一个模块吗?(我注意到Int32.abs
但是没有Int.abs
,例如)
glennsl..
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
,否则您将使用该类型.,和所有包含此(或类似)的注释: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
1> glennsl..:
这里是可用的各种整数数据类型,它们的类型,相关模块和文字语法的比较:
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
@Bergi,与动态无关,但是对于所有值都有一个所谓的*统一表示*作为单个单词.这对于有效实现参数多态非常重要,其中类型不固定.
更正:默认的`int`类型在32位平台上有31位,在64位平台上有63位.丢失的位是GC所需的标记位,它启用了未装箱的表示.