找到文件

时间:2014-11-09 15:07:16

标签: ocaml

到目前为止,提供Google搜索字符串,例如

"ocaml" regex

"ocaml" hashtbl

等。 通常给我提供了我一直在寻找的文档。

一个值得注意的例外是

"ocaml" "String.Map"

通过此搜索,我能找到的所有内容(文档方面都是如此)是String.map模块的String 功能的文档(或者是它)包”?)。 (如果理解正确,String.Map是一个数据结构,即键的类型为string的映射,而不是函数。)

更强大的Google搜索规范,例如

"ocaml" intitle:"String.Map"

...未能找到我追踪的文件。

在OCaml中的特定标准项目的文档中是否存在较少随意更通用的方式?

(我在上面添加了“更一般”的位,因为当想要搜索|>>>等非字母项目时,使用搜索引擎是不切实际的,或者对于某些非字母功能对某个问题至关重要的项目,例如当想要了解'a'_a之间的区别,或者搜索区分大小写时,就像我当前的搜索一样。)


PS:我对明显的地方没有运气,比如

https://ocaml.org
http://caml.inria.fr/pub/docs/manual-ocaml/libref/
https://opam.ocaml.org/packages/

(这并不是说它不是通过某些链接访问的“某处”;我只是没有看到它。)

我对一些绝望的猜测没有做得更好,比如

http://caml.inria.fr/pub/docs/manual-ocaml/libref/String.Map.html(状态代码404)

编辑:这是另一个无法打开任何文档页面的搜索:

"ocaml" "of_alist_exn"

如果按照我的理解,of_alist_exn某些标准OCaml模块中的函数,那么我发现上面的搜索失败令人震惊。 (我得到18次点击,并且没有一次点击给我(基于Google结果列表中提供的信息),就像文档页面一样。)

我从“被动”在线资源中学习了其他计算机语言的基础知识:教程和官方文档。而不是通过线性覆盖阅读本文档,而是通过搜索我想要知道的内容。我发现用这种方式甚至无法学习OCaml的基础知识。我想知道其他人是如何设法学习的......我必须假设它主要是通过口口相传(聊天室等)来获取关键但未记录的信息......

2 个答案:

答案 0 :(得分:9)

您需要了解OCaml标准库的一些背景知识。编译器附带了一个标准库,我们称之为stdlib。这是很好的,但非常薄的库,这是多年前写的。这就是为什么人们写了几个替代方案:CoreBatteriesextlib,仅举几例。

OCaml stdlib没有任何问题,但它非常小。但它可以被视为一种优势,特别是如果您将OCaml用作大学水平计算机科学课程的语言。但如果你是一个专业的软件开发者,那么你很快就会发现它太短了。这就是为什么Janestreet有一个OCaml核心库的原因。它是非常突出的图书馆,入口级别比stdlib高得多。所以,我假设你正在使用这个库(我认为你做出了正确的选择,但这只是我的意见)。

核心库是标准库的叠加层。它使用不同的命名约定,并尝试隐藏标准库中的定义。虽然许多仍然泄漏。你不应该将香草标准库与核心混合,直到你真的被迫。在这种情况下,您应该明确使用导出整个Caml的{​​{1}}模块。

现在,回到问题。可以通过简单的stdlib查询找到Core库的官方文档,该查询将为您提供指向official core documentation的链接。你可能会看到那里有很多模块。您应该从Std模块开始,这是一个模块,可以导出他们认为应该导出的模块(参见ocaml core documentation)。在此模块内部,您可能会找到__init__.py子模块。您甚至可以看到它从String模块(Core_string)重新导出到您的命名空间中。这是您要搜索的模块。您可以单击,模块内部的module String : Core_string符号也很小,但是,这是一个丑陋的点,只有签名,但没有文档。是的,我知道,它很糟糕,但后来才这样。因此,为了获得完整的文档,您需要单击Core_string模块,等等。所以,通过反复试验,我们发现了它。这个过程真的不友好,或者不尽如人意,但这只是因为没有人(原文如此)真的以这种方式行动。有一个更好的办法。您应该掌握的工具,通过OCaml实现高效工作,它是+emacsmerlinocp-index。当然,如果您愿意,可以将ocamlspot替换为emacs

因此,一旦您安装,配置和掌握了这些工具,您就可以在不离开自己喜欢的编辑器的情况下进行编码。首先,您可以直接从vim文件中查找文档。实际上,mli是OCaml语言的一种杀戮功能。例如,如果我需要刷新mli函数的知识,我只需将我的emacs指向String.strip模块,并阅读以下内容:

Core_string.mli

这是优秀的文档,imo。还有警告,您不会在此文件生成的文档中看到。

P.S。有一项工作正在进行中,以更好地制作OCaml的文档。迟早会变得更好,更容易接近。但目前它有点黑客。

答案 1 :(得分:2)

  

我对一些绝望的猜测没有做得更好,比如

     

http://caml.inria.fr/pub/docs/manual-ocaml/libref/String.Map.html   (状态代码404)

你太近了!见http://caml.inria.fr/pub/docs/manual-ocaml/libref/String.html(并做 " ctrl + f map")

如果您更改网址,还有各种编译器版本的文档:http://caml.inria.fr/pub/docs/manual-ocaml-4.02/libref/String.html

对于离线浏览,在基于Debian的系统上,您可以sudo apt-get install ocaml-doc,然后info ocaml并执行ctrl+s string.map(或浏览/usr/share/doc/ocaml-doc/

(我不认为opam可以安装文档,以防你转换到使用opam的其他编译器。但是我不认为这在开始时太常见了。)

当然,如果你正在使用Core,请参阅ivg所说的核心文档。 Core将使用自己的版本覆盖大多数标准库函数,因此对于Core,您必须先查看Core文档,然后才能在标准文档中查看,只有在Core中找不到它。