我一直在使用和进一会儿,要创建一些项目是更大和更复杂的玩具。我已经使用过去几年已经习惯了什么IDEs为我做--编制许多类、包装在罐子里,创建一批文件,为用户开始。

当我看着例子发展和他们似乎是沿线的文件加载到REPL,看看他们是如何工作、编辑文件刷新,重复。连一类或罐子正在产生的的任何地方。在斯图尔特Halloway是了不起的"的编程和"我不能找到一个单一的例子":gen类"为例。在题IDEs,我已经使用(ClojureBox和enclojure//需要将物品寄插件)似乎促进相同的工作流程。

这是故意的?是的工具太不成熟或不我只是没有"得到它"?

我想听到的一些工作流程的例子中的人们创造了一些非微不足道的程序要用定期的用户(不是其他开发)如果可能的。

感谢您分享您的意见。

有帮助吗?

解决方案

我认为这里确实有两个问题:

A)如何部署(以及构建和管理依赖项)。我只能说看其他具有类似目标/域名的项目并复制它们。

B)工作流程:

我的工作流程是这样的:

  1. 打开一个文件,写一些高级的一厢情愿的声明

  2. 开始编写一些支持它的功能

  3. 2.5在创建函数定义时将其复制到REPL

    1. 打开另一个文件并编写一些基本测试以检查功能是否正常工作
    2. 3.5将这些复制到REPL

      1. 在构建测试的两个缓冲区之间进行迭代,以达到最终目标。这些最终变成了类似的活动,我知道我已经完成了。

      2. 将参数文件包装成deftest

      3. 现在,当我一个月回来时,我可以运行我的测试并开心!保存REPL缓冲区可以轻松提供一些价值。那对我目前有用的东西,我很高兴能够接受更好的教育。

        至于IDE与REPL的选择 - 大多数IDE都有插件,这些插件都有REPL,所以我不确定它是一个还是另一个选择 - 真的只是关于你在哪个文本编辑器中工作,以及你想如何管理你的项目结构。没有任何'这样做'结构预制AFAIK所以在这一点上更容易看到特定的项目(如Clojure本身,或半影或组件或主站点上列出的任何库。

其他提示

大多数LISP家族(和其他功能语言)IDE长期以来一直鼓励REPL开发方法。其中一些REPL还具有您可能与Java IDE关联的自动完成功能。

REPL比标准方法具有几个主要优势。首先,它允许您在程序运行期间执行任意代码,这可以使调试多线程系统更加简单。其次,更重要的是,它可以让您在编码时轻松测试功能。您不需要围绕新函数或类构建框架,您可以直接在REPL中使用它,并查看它如何响应各种用例。

嗯,首先,几乎任何编辑器或IDE的任何体面的开发插件都会为您提供一种在IDE中使用Clojure REPL的方法。甚至可能允许您将文件加载到REPL中进行测试等。您无需选择其中一个。

Enclojure走了很长的路,这是肯定的。但是,大多数人都非常满意使用Emacs,包括我自己。 Emacs使用Lisp作为其配置语言,因此它通常是Lisper最自然的选择。

对于具有REPL的语言,使用REPL作为开发过程的主要部分是常态。编辑文件,将它们加载到REPL中,与它们一起播放以查看是否有工作,冲洗,重复。这是使用Clojure,Haskell和CL等REPL语言的主要优点之一。

至于构建jar,编译Clojure代码和东西,这很简单。如果你不愿意的话,你甚至不会/大多数情况下编译Clojure代码。当你这样做时,你可以用gen-class编译它,它将它编译成类文件,然后你可以把它放到一个jar中。互联网中有大量的例子甚至是教程。最简单,最有效的方法是使用Ant之类的东西,编写一个构建脚本来编译Clojure代码并为你生成.jar。我第一次这样做,我觉得这很难做,但实际上真的很简单。我只是查看了Clojure和Clojure-Contrib Ant构建文件,并引用了Ant帮助页面以获取我需要的所有其他内容。

我应该提到的一件事是Enclojure /为你实际构建可执行的.jar文件,如果你要求的话。我相信你将来会增加更多先进的东西。事实上,它们仍然很新。

我用两-月食IDE和逆时针插件,它提供了一个REPL。这是一个特别好的组合如果发展Java码在旁边题(作为我做)。

我的总体做法是:

  • 写和代码在编辑器
  • 保持REPL开放检测出来的东西(Ctrl+进入是一个有用的快捷方式在这里:它执行的任何代码被选中你的编辑在REPL)
  • 使用通用IDE工具为项目管理、建筑、测试、SCM等。

有时候我也的工作纯粹是在REPL。这通常是更好地进行测试的事情很快。如果我特别喜欢的一块试验的代码,我将会简单复制、粘贴从REPL到我的测试套。

我所做的是与Leiningen一起创建一个项目。如果您只想暂时搁置一段时间,只需键入 lein repl ,就可以为该repl设置项目类路径。

实际上,我使用Emacs,粘液和swank clojure。导航到项目后,只需输入 M-x clojure-jack-in 即可。这启动swank服务器和slime连接到它,你有一个缓冲区中的repl。当然,这比在shell中运行repl更值钱。你得到的是能够在另一个缓冲区中编写代码,并使用键绑定选择sexps或更大的单位,并在repl中执行它们以查看它是否有效。粘液还可以为您提供方便的键绑定以完成常见任务。有关详细信息,请参阅github上的swank-clojure。

JohnJ,你可以在Emacs中做同样的事情。实际上这个短语可能是一个重言式。

(add-hook 'after-save-hook etc.

以下是某人的git后保存挂钩示例: https://gist.github.com/449668

使用Eclipse,每次在项目中保存文件时都可以运行单元测试(或任何程序)。整个过程只需不到一秒钟 - 它对于测试驱动开发非常有用,并且在大多数情况下无需切入和粘贴到REPL中。另外,你可以保持测试! : - )

每次启动测试时,您都希望使用蛋糕来避免JVM启动时间。您可以在命令行上运行 cake test ,或者只是让Eclipse在您保存项目中的任何文件时为您运行它。

我通过使用 Leiningen 设置项目来安装蛋糕,并安装逆时针 Eclipse插件。要设置Eclipse以在每次保存时运行测试,请选择Project-> Properties-> Builders,单击New,选择Program,将其称为'run tests',添加 cake 的路径在“位置”下,选择项目的工作目录,并将 test 添加到可选参数中。在“构建选项”选项卡下,选择“在自动构建期间”。

我从Jeff Younker的书“敏捷Python开发基础”中得到了一般性的想法。作为Emacs人已经20年了,但是这个技巧最近使Eclipse成为我工作流程的前沿。


更新:大约一年后,我现在使用Midje和lazytest选项在使用Emacs和Eclipse进行开发时做同样的事情。

  

"当我查看Clojure中的开发示例时,他们似乎是按照加载文件的方式进入REPL,看看它们是如何工作的,编辑文件,重新加载,重复。 Nary是一个在任何地方生成的类或jar ......我想听听一些人的工作流示例,这些人创建了一些普通用户(不是其他开发人员)可能使用的非平凡程序。

调试被调用的clojure函数的示例在java代码(eclipse)中是微不足道的,但是说明了如何在eclipse中链接项目,以便可以从java中调用clojure / scala功能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top