找到文件

kjo*_*kjo 4 ocaml

到目前为止,给谷歌搜索字符串如

"ocaml" regex

"ocaml" hashtbl
Run Code Online (Sandbox Code Playgroud)

等方面通常得到我,我一直在寻找的文档.

一个值得注意的例外是

"ocaml" "String.Map"
Run Code Online (Sandbox Code Playgroud)

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

更有力的Google搜索规范就像

"ocaml" intitle:"String.Map"
Run Code Online (Sandbox Code Playgroud)

...未能找到我追求的文件.

有没有少偶然性,和更普遍的,顺便零的文档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"
Run Code Online (Sandbox Code Playgroud)

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

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

ivg*_*ivg 9

您需要了解OCaml标准库的一些背景知识.编译器附带了一个标准库,我们可以调用它stdlib.这是很好的,但非常薄的库,这是多年前写的.这就是为什么人们写了几个备选方案:Core,Batteries,extlib,仅举几例.

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

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

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

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

(* Warning: the following strip functions have copy-on-write semantics (i.e. they may
   return the same string passed in) *)

(** [lstrip ?drop s] returns a string with consecutive chars satisfying [drop] (by default
    white space, e.g. tabs, spaces, newlines, and carriage returns) stripped from the
    beginning of [s]. *)
val lstrip : ?drop:(char -> bool) -> t -> t

(** [rstrip ?drop s] returns a string with consecutive chars satisfying [drop] (by default
    white space, e.g. tabs, spaces, newlines, and carriage returns) stripped from the end
    of [s]. *)
val rstrip : ?drop:(char -> bool) -> t -> t

(** [strip ?drop s] returns a string with consecutive chars satisfying [drop] (by default
    white space, e.g. tabs, spaces, newlines, and carriage returns) stripped from the
    beginning and end of [s]. *)
val strip : ?drop:(char -> bool) -> t -> t
Run Code Online (Sandbox Code Playgroud)

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

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