8

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

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

4

4 回答 4

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 类似的功能。

于 2012-10-14T08:21:37.643 回答
5

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

我应该注意到,由于 JVM 和 Leiningen 的启动成本,运行 autoexpect 比重复运行“lein test”或“lein run”要快得多。

于 2012-10-14T14:23:28.390 回答
3

听起来您正在寻找的是Clojure Koan 插件。这是一个工作表式的问题解决练习工具,可监视您的编辑并提供有关您工作正确性的即时反馈。

对于实际的开发工作流程,我赞同其他人在此处提供的关于工具和交互式环境设置的建议,但由于您明确表示您正在学习 Clojure,因此这可能是一种有趣的方法。还有一个名为4Clojure的 Web 应用程序,您可能会玩得开心。

但是,您最终(或马上)会想要建立一个流畅且方便的开发环境,到目前为止我还没有看到任何提及一些重要工具的内容。一个人提到了 Nrepl。如果你喜欢 Emacs,有一种类似于 slime/swank 的交互模式,它可以插入到名为nrepl.el的 nrepl中,它在编辑文件和在 repl 中乱七八糟之间提供了非常好的集成。同样,还有VimClojure,您可以找到 IntelliJ ( LaClojure ) 和 Eclipse (逆时针) 的插件,这些插件也很流行且维护良好。

有人提到自动期望。如果您正在寻找一个好的 TDD 设置,我会推荐midje。如果您使用的是 leiningen 的 2.0 预览版,那么惰性测试集成存在一些问题并且惰性测试本身已经或应该被弃用。但我个人更喜欢 midje 而不是期望,这些问题肯定会在lein-midje的 2.0 版本中得到解决。与非预览版 (1.x) leiningen 一起使用的稳定版 lein-midje 具有使用lazytest 的类似自动测试的功能。

于 2012-10-14T23:40:17.460 回答
0

正如没有人提到的那样,草书现在真的很好,虽然我很伤心回到一个成熟的 IDE。您可以使用内置的 repl 轻松地做与 Emacs 相同的事情,只需移动到您正在使用的命名空间并在每次进行更改时进行同步。这是一种非常好的工作方式。

于 2015-06-25T12:33:45.600 回答