Ocaml “B”是什么意思?

Ocaml “B”是什么意思?,ocaml,Ocaml,在toplevel中,我得到以下输出: #`B - : [> `B ] = `B 那么“B”是什么意思?我们为什么需要它 真诚的 这是一种多态性变体。从: 第1.4节中介绍的变体是构建数据结构和算法的强大工具。然而,当用于模块化编程时,它们有时缺乏灵活性。这是因为每个构造函数都保留一个名称,以便与唯一类型一起使用。不能在另一种类型中使用同一名称,或者认为某种类型的值属于具有更多构造函数的其他类型。 对于多态性变体,这一原始假设被删除。也就是说,变量标记不属于任何类型,类型系统只会根据其用

在toplevel中,我得到以下输出:

#`B
- : [> `B ] = `B
那么“B”是什么意思?我们为什么需要它


真诚的

这是一种多态性变体。从:

第1.4节中介绍的变体是构建数据结构和算法的强大工具。然而,当用于模块化编程时,它们有时缺乏灵活性。这是因为每个构造函数都保留一个名称,以便与唯一类型一起使用。不能在另一种类型中使用同一名称,或者认为某种类型的值属于具有更多构造函数的其他类型。

对于多态性变体,这一原始假设被删除。也就是说,变量标记不属于任何类型,类型系统只会根据其用途检查它是否为允许值。在使用变量标记之前,不需要定义类型。变量类型将针对其每个用途独立推断


前缀为反引号的标识符(如
`B
)是类型的构造函数。它类似于代数类型的构造函数:

type abc = A | B | C
但是,您可以使用多态变量值,而无需声明它们,而且通常它们比通常的代数类型灵活得多。折衷的是,它们的使用也有点棘手

人们使用它们的一个目的是作为简单的命名值,比如C中的
enum
值,或者更准确地说,像Lisp中的原子。您可以使用普通的代数类型来实现这一点,但是您需要仔细维护它们的定义并防止重复。对于多态变体,您不需要执行这两种操作。您可以在不声明它们的情况下使用它们,并且构造函数不需要是唯一的(两种不同的类型可以具有相同的构造函数)

多态变量构造函数也可以像代数构造函数一样接受参数。因此,您还可以编写
(`b77)
,一个带有单个
int
参数的构造函数

这是一个相当大的主题——有关更多详细信息,请参阅OCaml手册的上面链接部分