在开始 REPL 之前拥有 Clojure 项目有什么好处?为什么 Cider 不断询问和提醒用户有关它的问题?

What is the benefit of having a Clojure project before starting the REPL? Why Cider keeps asking and nudging the user about it?

我正在使用 Emacs,每次我使用 cider-jack-in 启动 Clojure REPL ,迷你缓冲区回显以下内容:

Are you sure you want to run `cider-jack-in' without a Clojure project? (y or n)

我之前有使用 Common Lisp 和 Slime 的经验。在另一个 lisp 生态系统中,没有这样的东西。你不用问任何问题就开始使用 Common Lisp。

我不明白 Cider 发这条消息的目的。可能是因为我遗漏了一些东西。

需要强调的是,我知道如何使用 lein 命令创建 Clojure 项目。我只是不明白它的相关性。

在启动 REPL 之前没有使用 Clojure 项目,我错过了什么? 为什么它如此重要?

使用 .clj 文件、REPL 开发 Clojure 程序、进行一些交互式编程以及随着程序版本的变化重新编译东西的缺点是什么?

只是防止命名空间出现问题?

谢谢

我也是从Common Lisp到Clojure,一开始很迷茫。

我们使用 lein new 因为 BraveClojure 等显示这是唯一的方法。尽管它是真实的,但它太旧了。 Clojure 社区应该编写更多 up-to-date 教程和书籍。

有例如boot - 除了 lein 之外的另一个构建工具: https://github.com/boot-clj/boot

简短介绍: https://jjmojojjmojo.github.io/boot-getting-started-with-clojure-in-10-minutes.html

这允许您使用 $ boot repl 启动一个 repl 一个以 boot.user 作为命名空间的 repl 类似于 CLUSER.

它和lein一样强大。

对于命令行脚本,有 babashka https://github.com/babashka/babashka 它被解释为用于脚本编写的 Clojure - 甚至可以从命令行调用。

无论是通过 deps.edn 文件(针对 Clojure CLI 工具)还是 project.clj 文件(针对 lein),使用“项目”的主要原因是提供依赖关系,从而提供 CLASSPATH。由于 Clojure 在 JVM 上运行,因此必须在启动 Java 进程之前设置 CLASSPATH。顺便说一句,严格来说这并不正确,但我暂时忽略这种复杂性。 JVM 使用 CLASSPATH 在运行时查找并加载 类。

如果您不使用任何依赖项,那么您可以不使用项目。

我自己将 emacs 与 cider 和 Clojure CLI 工具一起使用。您可能还想查看 inf-clojure emacs 包。