当我在交互环境(OCaml或utop)中执行以下命令时,所有“int”类型的表达式都变成了“int/2”类型。这种行为可以复制如下。
# 3;;
- : int = 3
# type int;;
type int
# type a;;
type a
# 3;;
- : int/2 = 3
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会这样?谢谢!
2020 年 3 月 2 日编辑:
我发现如果我执行以下操作,“int/2”将不会出现。谁能解释一下这里发生了什么?
# 3;;
- : int = 3
# type int;;
type int
# 3;;
- : int = 3
Run Code Online (Sandbox Code Playgroud)
更新:以上情况使用了OCaml 4.08.1 版。
常量3是内置类型int,它不是int作用域内的类型。所以顶层附加一个数字来表示这个事实。否则事情会变得非常混乱。即,您可以收到诸如“期望值为 int 类型但该值为 int 类型的值”之类的消息。使用/n标签,它更清楚地说明“期望一个值的类型为 int/n(一种 int),但该值的类型为 int/m(另一种不同类型的 int)”
此行为似乎是在 OCaml 4.08.0 中添加的。您可以在此处找到对该功能的讨论:https : //github.com/ocaml/ocaml/pull/1120
更新
您应该显示您的 OCaml 版本。此功能是最近添加的,您可能会遇到带有和不带有该功能的顶级。
无论如何,您的两个示例都int/n在我使用 OCaml 4.10.0 的测试中使用了该符号
$ ocaml
OCaml version 4.10.0
# 3;;
- : int = 3
# type int;;
type int
# type a;;
type a
# 3;;
- : int/2 = 3
$ ocaml
OCaml version 4.10.0
# 3;;
- : int = 3
# type int;;
type int
# 3;;
- : int/2 = 3
Run Code Online (Sandbox Code Playgroud)
(也有可能这种行为在 OCaml 4.10.0 中变得更加一致了。)