2012-04-11 127 views
3

我目前正试图潜入球拍/方案一点。我有一个(X)REPL实例在我的编辑器旁边运行,这非常有助于我探索该语言。但是,我似乎无法找到一个XREPL命令或宏(或其他)来显示函数的源代码。有没有办法从Racket REPL中查看函数的源代码?

所有需要的部分似乎有:

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 

但是,如果所有你想知道的是如何调用这个函数,它都不会有用。 有没有办法访问函数的实现,或者至少是参数名?

或者,这也适用于我 - 某种类型的help打开文档的某种类型的in-REPL纯文本?

回答

3

几周前,XREPL ,describe命令得到了增强,可以打印函数参数名称和合同; source

这是Racket文档中的“蓝色框” - 所谓的,因为他们在Racket 6 CSS重新设计之前曾经是蓝色的;现在他们实际上是灰色的:)。

你可以通过从HEAD构建球拍来获得这个。否则,它应该在6.1之后的下一个版本中。

请记住,这似乎仅限于已安装软件包中具有Scribble文档的函数。

+0

现在接受了这个,因为',describe'在6.1.1中,并且完全符合我的要求 - 感谢更新! – rwos 2015-06-12 15:25:55

4

Eli Barzilay注意到Geiser项目包括code以提取此文档。


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

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

及其相关项,其中住在:https://github.com/dyoo/wescheme-docs

我写的extract-docstring.rkt库在Racket 5.2.1下工作,但我承认做了一些非常恶心的,黑客的事情来从文档中提取文本。

可能值得告诉Racket Users mailing list的人们能够从xrepl访问基于文本的文档是重要的;也许它会得到推动力。

+3

这在邮件列表中出现了很多次,没有好的办法做到这一点,因为函数可以有非常复杂的参数列表(例如,它可能使用'case-lambda'具有不同的参数名称和目的2和3个参数)。最严肃的尝试可能是[geiser](http://www.nongnu.org/geiser/)。 – 2012-04-13 00:32:45

+0

谢谢,我会看看它! @EliBarzilay:我不使用emacs,但是geiser的[解决方案](http://git.savannah.gnu.org/cgit/geiser.git/tree/scheme/racket/geiser/autodoc.rkt)看起来很不错初始点。谢谢! – rwos 2012-04-13 08:39:10

+0

@rwos:你也可以搜索邮件列表中的档案 - 我们已经与Jao讨论了这些问题。 – 2012-04-13 09:49:55

3

我不确定这是否适用于球拍,但在麻省理工学院的计划中有几个内置程序可以帮助您关闭。 (下面,proc只是代表任何程序)

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

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

+1

'pa'和'pp'正是我要找的东西 - 遗憾的是,球拍并没有提供它们 – rwos 2012-04-30 15:38:07

相关问题