OCaml 中 "int/2" 的类型是什么
What is the type "int/2" in OCaml
当我在交互环境(OCaml
或utop
中执行以下命令时,所有"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在上述案例中使用。
常量 3
是内置类型 int
,它不是范围内的类型 int
。所以顶层附加一个数字来表示这个事实。否则事情会变得非常混乱。也就是说,您可以获得 "a value was expected of type int but this value is of type int" 之类的消息。使用 /n
标签,它更清楚地说 "a value was expected of type int/n (one kind of int) but this value is of type int/m (another different kind of int)"
OCaml 4.08.0 中似乎添加了此行为。您可以在此处找到对该功能的讨论:https://github.com/ocaml/ocaml/pull/1120
更新
您应该显示您的 OCaml 版本。此功能是最近添加的,您可能会遇到有或没有此功能的顶层。
无论如何,在我使用 OCaml 4.10.0
的测试中,您的两个示例都使用了 int/n
符号
$ 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 中使此行为更加一致。)
当我在交互环境(OCaml
或utop
中执行以下命令时,所有"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在上述案例中使用。
常量 3
是内置类型 int
,它不是范围内的类型 int
。所以顶层附加一个数字来表示这个事实。否则事情会变得非常混乱。也就是说,您可以获得 "a value was expected of type int but this value is of type int" 之类的消息。使用 /n
标签,它更清楚地说 "a value was expected of type int/n (one kind of int) but this value is of type int/m (another different kind of int)"
OCaml 4.08.0 中似乎添加了此行为。您可以在此处找到对该功能的讨论:https://github.com/ocaml/ocaml/pull/1120
更新
您应该显示您的 OCaml 版本。此功能是最近添加的,您可能会遇到有或没有此功能的顶层。
无论如何,在我使用 OCaml 4.10.0
的测试中,您的两个示例都使用了int/n
符号
$ 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 中使此行为更加一致。)