1

我收到ocamldoc警告:

警告:未找到元素 MyModule.VariantName

{!MyModule.VariantName}在文档注释中使用时。


ocamldoc医生说_

在本章中,我们使用元素一词来指代 OCaml 源文件的以下任何部分:类型声明、值、模块、异常、模块类型、类型构造函数、记录字段、类、类类型、类方法、类值或类继承子句。

稍后在解释文本格式时:

{! string }  插入对名为string的元素的引用。string必须是完全限定的元素名称,例如Foo.Bar.t. 可以使用以下语法强制引用元素的种类(当各种元素具有相同的限定名称时很有用):{! kind : string }其中kind可以是module, modtype, class, classtype, val, type, exception, attribute,methodsection

我可以使用 引用类型构造函数{! string }吗?

第一类元素与第二类元素的关系如何?

4

1 回答 1

3

在查看实现之后,似乎可以引用变体构造函数,但语法相当奇怪:您必须使用{!typename.constrname}语法,或者,从另一个模块,{!Modulename.typename.constrname}. 使用下面的代码示例,{!mylist.Cons}例如。这将生成一个超链接,但不幸的是,文本仍然是typename.constrname,而不仅仅是指构造函数名称本身。

(我还了解到,有一种“显式”方法可以告诉 ocamldoc 所提到的标识符属于哪个语法类别,我想在一些模棱两可的情况下有所帮助。所以就像你可以使用或者{!mylist}表示{!type:mylist}类型构造函数一样,你可以使用要么 要么{!mylist.Nil}表示{!const:mylist.Nil}变体构造函数。)

词汇说明:在类型声明中

type 'a mylist =
| Nil
| Cons of 'a * 'a mylist

名称NilCons不称为“类型构造函数”,仅称为“构造函数”或“变体构造函数”。mylist在此示例中,类型构造函数是位于类型而非值级别的参数化类型(或非参数化,对于常量类型构造函数)的名称。

于 2013-05-24T21:13:07.960 回答