gpt4 book ai didi

clojure - 高效的 Clojure 工作流程?

转载 作者:行者123 更新时间:2023-12-03 10:03:46 26 4
gpt4 key购买 nike

我正在使用 Clojure 开发一个宠物项目,但想知道我是否可以加快我的工作流程。

我当前的工作流程(使用 Compojure)是:

  • lein swank 开始 Swank .
  • 转到 Emacs,与 M-x slime-connect 联系.
  • 一个一个地加载所有现有的源文件。这也会启动一个 Jetty 服务器和一个应用程序。
  • 在 REPL 中编写一些代码。
  • 当对实验感到满意时,写一个我想到的结构的完整版本。评估(C-c C-c)它。
  • 将 REPL 切换到此构造所在的命名空间并对其进行测试。
  • 切换到浏览器并使用受影响的页面重新加载浏览器选项卡。
  • 调整代码,评估它,在浏览器中检查。
  • 重复上述任何一项。

  • 它有很多烦恼:
  • 我必须一直在 Emacs 和浏览器(或浏览器,如果我正在测试诸如使用多个浏览器的模板)之间切换。是否有一个常见的习惯用法可以自动执行此操作?我曾经有一个不断重新加载页面的 JavaScript 位,但显然,当我必须与页面交互超过几秒钟时,它的实用性有限。
  • 当我试验和编写测试函数时,我的 JVM 实例变得“脏”。基本上命名空间会被污染,尤其是当我在命名空间之间重构和移动函数时。这可能导致符号冲突,我需要重新启动 Swank。我可以取消定义符号吗?
  • 我在重新启动 Swank 时一一加载所有源文件(C-c C-k)。我怀疑我做错了。
  • 在 REPL 和文件编辑器之间切换可能有点烦人,尤其是当我在浏览器旁边打开了很多 Emacs 选项卡时。

  • 我正在寻找改进上述要点和整个工作流程的方法,所以如果你能分享你的,我将不胜感激。

    附言

    我之前也使用过 Vimclojure,因此也欢迎基于 Vimclojure 的工作流程。

    最佳答案

    不是完整的工作流程描述,只是一些想法:

  • 可以使用 ns-unmap 从命名空间中删除 Var功能。为方便起见,请使用 undef宏可以建立在它之上,例如像这样:
    (defmacro undef [& syms]
    `(do ~@(map (fn [s] `(ns-unmap *ns* '~s)) syms)))
    ns-unalias也可能感兴趣。
  • 没有理由只为了在每个文件中执行 C-c C-k 而遍历包含 namespace 的文件;你可以 require你在 REPL 中需要的命名空间。

    此外,如果您在 SLIME REPL 中键入几个字符,然后使用 M-p/M-n 浏览历史记录,则只会显示与您手动输入的初始文本位匹配的条目。这与 Paredit 兼容(结尾的右括号不会有问题)。所以,如果你在一开始就建立了一个巨大的需求——(require '[foo :as f] '[bar :as b] '[clojure.contrib.sql :as sql] ...) -- 然后在重新启动 Swank 后,您需要做的就是输入类似 (require '[f 的内容然后按 M-p 将该表单再次带到 REPL 提示符。

    诚然,这可以通过多种方式实现自动化(例如,让 Swank REPL 搜索配置文件,或者将简单的宏扩展为适当的 require 形式,该形式可以在从项目中引入一个实用程序命名空间后使用- 尤其是后一个想法很容易实现),但我发现它的烦恼因素足够低,到目前为止我还没有对任何改进感到烦恼。
  • 当您在启用 SLIME 的缓冲区中时,您可以使用 C-c C-z 制作一个弹出 SLIME REPL 的窗口。此外,您应该尝试使用 ido 如果你还没有。我倾向于使用在屏幕左侧的窗口中打开的代码缓冲区和右侧的 REPL 缓冲区。与 windmove-leftwindmove-right绑定(bind)一些方便的键,我往往很高兴。如果我需要经常查看额外的缓冲区,我会使用额外的 Emacs 帧。
  • 顺便说一句,我不使用 lein swank通常,我更喜欢我的自定义 clojure-project 函数(Phil Hagelberg 原版的调整版)。有时,我想改进它...也许我会处理每个项目 import/require下次发生这种情况时自动化。 ;-)
  • 关于clojure - 高效的 Clojure 工作流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2984146/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com