什么是B意味着什么?

z_a*_*xis 4 ocaml

在toplevel,我得到以下输出:

#`B
- : [> `B ] = `B
Run Code Online (Sandbox Code Playgroud)

那么什么是B意味着什么?我们为什么需要它?

祝商祺!

Jef*_*eld 6

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

type abc = A | B | C
Run Code Online (Sandbox Code Playgroud)

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

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

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

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