有没有办法从球拍REPL中查看功能的源代码?(Is there a way to view a fu

2019-06-23 13:21发布

我目前正试图潜入球拍/计划一下。 我有(X)REPL运行的实例,我旁边的编辑器,它可以帮助我非常探索语言。 不过,我似乎无法找到一个XREPL命令或宏(或其他),它会告诉我函数的源代码。

所有需要的部分似乎有:

XREPL的describe命令知道该文件:

-> ,describe string-join
; `string-join' is a bound identifier,
;   defined in racket/string.rkt
;   required directly

get-collects-search-dirs知道路径:

-> (require setup/dirs)
-> (get-collects-search-dirs)
'(#<path:/home/richard/.racket/5.2.1/collects>
  #<path:/usr/local/lib/racket/collects>)

和对事物的反射面有:

-> (procedure-arity string-join)
2

但是这一切都停止短的是有用的,如果你想知道的是如何调用该函数。 是否有访问函数的实现方式,或者至少是参数的名字呢?

或者,这也为我工作-某种在-REPL明文相当于该文档的help打开?

Answer 1:

几个星期前的XREPL ,describe命令得到增强,打印功能参数名称和合同; 源 。

这是“蓝盒子”,从球拍的文档 - 所谓的,因为他们曾经是球拍6 CSS重新设计之前的蓝色; 现在他们居然灰色:)。

您可以通过从HEAD球拍建设得到这个。 否则,它应该是在下一版本6.1以后。

请记住,这似乎仅限于在已安装的软件包涂鸦文档的功能。



Answer 2:

伊莱Barzilay指出, GEISER项目包括代码提取该文件。


我确实有提取文本出来的HTML文档的源代码的实验位,尽管这代码可能已经bitrotted。

请参阅: https://github.com/dyoo/wescheme-docs/blob/master/test-extract-docstring.rkt

和它的相关性,其中住在: https://github.com/dyoo/wescheme-docs 。

extract-docstring.rkt库我写了作品在拍5.2.1,但我承认在做一些很恶心的,哈克的东西来提取文档的文本。

这可能是值得的告诉在乡亲球拍用户邮件列表是能够访问来自基于文本的文档xrepl是一件重要的事; 也许它会得到推动移动。



Answer 3:

我不知道这是否适用于球拍,但在MIT方案有几个内置的程序,将让你接近。 (下面, proc只是代表任何程序)

  1. (procedure-arity proc)正如你所提到会给你的参数个数
  2. (pa proc)将打印参数列表
  3. (pp proc)将打印过程的主体

这将工作的许多内置的程序,以及任何你自己定义的,但如果你尝试调用任何这些特殊形式像defineset! 你会得到一个错误。



文章来源: Is there a way to view a function's source code from within the Racket REPL?