Clojure工作表

t.O*_*t.O 8 clojure

我最近一直在学习Clojure.在Clojure世界中是否存在类似Scala的工作表,我可以将任何代码放入其中并在保存后立即对其进行评估?或者也许Clojure有类似的解决方案?

我现在正在与lein repl合作,遗憾的是,不能说它是有史以来最有用的工具.

Boz*_*sov 10

在Lisp开发中(特别是Clojure),首选的编程风格通常被称为交互式编程 - 开发人员始终保持应用程序加载的图像,并通过REPL与之交互.您可以轻松地动态修改加载的代码并立即在REPL中测试更改(使用Scala完全不容易 - 必须使用类似JRebel的方法来执行此操作).相比之下,我发现Scala工作表是一个非常原始的解决方案......

我在Clojure中遵循的工作流程是:

  1. 我在Emacs中打开nREPL.el - 这会加载我的lein2项目及其所有依赖项并给我一个REPL,我可以使用试用的东西
  2. 我在源代码中编写了一些代码并加载了已更改的函数(可能是通过使用 C-M-x
  3. 然后我按下C-x C-z跳回到REPL,然后在其中试用新代码
  4. 我回到第2步

基本上Clojure REPL比Scala REPL强大得多,我个人认为它远远优于Scala IDE工作表.一旦你习惯了交互式增量编程风格,Lisp就会提供其他所有东西,通过比较开始看起来奇怪复杂.我不熟悉Eclipse的CounterClockWise Clojure插件,但我很确定它提供与Emacs的nREPL.el类似的功能.


Joh*_*hnJ 5

您可能想看看Leiningenautoexpect插件.每次在工作目录中保存任何文件时,插件都会编译并运行您的代码; 作为奖励,它将评估任何可以作为测试的"期望"函数调用.这对于测试驱动开发非常有用,并且对于使用REPL是一个很好的补充,如另一个答案所述(我经常使用一个或另一个或两者,这取决于我有多少测试用例).

我应该注意,由于JVM和Leiningen的启动成本,运行autoexpect比反复运行"lein test"或"lein run"要快得多.