4

在顶层,我得到以下输出:

#`B
- : [> `B ] = `B

那么'B是什么意思?为什么我们需要它?

真挚地!

4

2 回答 2

6

以反引号为前缀的标识符是多态变体类型`B的构造函数。它类似于代数类型的构造函数:

type abc = A | B | C

但是,您可以在不声明它们的情况下使用多态变量值,并且通常它们比通常的代数类型灵活得多。权衡是它们使用起来也有点棘手。

人们使用它们的一件事是作为简单的命名值,如enumC 中的值。或者更准确地说,如 Lisp 中的原子。您可以为此使用普通的代数类型,但您需要仔细维护它们的定义并防止重复。使用多态变体,您无需执行其中任何一项。您可以在不声明它们的情况下使用它们,并且构造函数不需要是唯一的(两种不同的类型可以具有相同的构造函数)。

多态变体构造函数也可以带参数,就像代数构造函数一样。所以你也可以编写(`B 77)一个带有单个int参数的构造函数。

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

于 2012-07-18T06:49:21.380 回答
3

它是一个多态变体。从文档中:

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

对于多态变体,这个原始假设被删除。也就是说,一个变体标签不属于任何特定的类型,类型系统只会根据它的用途检查它是否是一个可接受的值。在使用变体标记之前,您无需定义类型。变体类型将针对其每种用途独立推断。

于 2012-07-18T06:48:33.433 回答