2

当我在交互环境中执行以下命令时(OCamlutop),所有“int”类型的表达式都变成了“int/2”类型。这种行为可以复制如下。

# 3;;
- : int = 3

# type int;;
type int

# type a;;
type a

# 3;;
- : int/2 = 3

有谁知道为什么会这样?谢谢!

2020 年 3 月 2 日编辑:

我发现如果我执行以下操作,“int/2”将不会出现。谁能解释一下这里发生了什么?

# 3;;
- : int = 3

# type int;;
type int

# 3;;
- : int = 3

更新:在上述情况下使用了OCaml 版本 4.08.1 。

4

1 回答 1

6

常量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

(也有可能这种行为在 OCaml 4.10.0 中变得更加一致。)

于 2020-02-21T05:22:41.423 回答