Reason ML中的整数类型和模块是什么?

时间:2018-02-17 10:40:26

标签: integer ocaml reason reasonml

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

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

This has type:
  int
But somewhere wanted:
  int32

我对此感到有些惊讶,因为在其他语言int只是int32的别名。

我的问题是:

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

1 个答案:

答案 0 :(得分:7)

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

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位,除非您需要{{1}提供的精确算术语义,否则您将使用该类型},int32int64In32Int64Nativeint都包含此(或类似)注释:

  

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

我希望能回答你的问题。

编辑:当使用BuckleScript编译为JavaScript时,这与Reason非常相似,语义略有不同:

  • nativeintint32的行为相同
  • int64的行为与int
  • 相似
  • int32主要被视为nativeint,但有一些例外情况更像整数。

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