是否可以在Clojure REPL中使用_good_ tab完成?

时间:2012-08-08 23:26:29

标签: clojure read-eval-print-loop tab-completion

好的标签完成意味着使用反射或其他任何动态生成(不需要在某处预先定义完成的预定列表),并且知道在特定的地方可以做什么和不能做什么。

就像在(.<TAB> x)中一样,我将得到x的方法列表,在(println <TAB>)中我得到了本地和全局定义的列表,在(Math/<TAB>中我得到了数学函数列表。

例如,我喜欢 Tab 在ghci(Haskell)或ipython中的工作方式。

5 个答案:

答案 0 :(得分:7)

查看reply以获得比默认REPL更好的REPL。它涵盖了您提到的三个用例中的两个,使Java实例方法完成。

如果您使用leiningen v2 +,则它是lein repl命令调用的默认REPL。

答案 1 :(得分:4)

这当然是可能的,并且有几种工具正朝着这个方向发展。最新版本的clojure包含一个“开发模式”选项,可以更轻松地构建此类工具;例如,它关闭本地清除以帮助调试,并且目的是最终能够导出有关编译过程的更多信息以供IDE和相关工具使用。这被广泛认为是改善Clojure生态系统的一个领域,根据我的观察,一些非常聪明的人正在研究它。

答案 2 :(得分:1)

Eclipse CounterClockwise REPL的当前测试版大大改进了代码完成,并涵盖了所有情况,包括Java完成。当然不是独立的命令行REPL。然而,Clojure是一种动态语言,它对类型的完成有限制,在Haskell等强类型语言中更容易。

答案 3 :(得分:1)

我正在使用Emacs作为Slime和Emacs auto-complete的编辑器,并且所有这些功能都适用于Emacs中的Repl:Java类和字段的自动完成,自动完成以及Clojure函数的文档。不幸的是,如果您不使用Emacs作为编辑器/ IDE,那将无效。

答案 4 :(得分:0)

看起来IClojure或多或少做得很好。它的灵感和看起来像IPython并提供标签完成(不完整,提到3个案例中的2个)并帮助在控制台中开发Clojure。虽然不是很稳定。