什么是B意味着什么?

时间:2012-07-18 06:07:49

标签: ocaml

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

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

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

此致!

2 个答案:

答案 0 :(得分:6)

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

type abc = A | B | C

但是,您可以使用多态变量值而不声明它们,并且通常它们比通常的代数类型更灵活。权衡的是它们使用起来也相当棘手。

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

多态变体构造函数也可以采用参数,就像代数构造函数一样。因此,您还可以编写(`B 77),一个带有int参数的构造函数。

这是一个非常重要的主题 - 有关详细信息,请参阅OCaml手册的上述链接部分。

答案 1 :(得分:3)

这是一个多态变体。来自documentation

  

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

     

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