Coffee Break Clojure, Vol.1

Coffee Break Clojure, Vol.1

💡 原文中文,约7700字,阅读约需19分钟。
📝

内容提要

本文介绍Clojure入门工具。Clojure运行于JVM,需先安装Java和Clojure。核心是REPL(读取-求值-打印-循环),支持交互式编程,边写边测,类似热重载。推荐用Leiningen启动nREPL服务器,让编辑器通过协议连接。Neovim用户可配Conjure插件在编辑器内求值,再用nvim-paredit进行结构化编辑(如吞、吐、拖拽),高效操作括号。

🔎

延伸解读

REPL:不只是命令行,更是交互式编程的入口

文章强调REPL(读取-求值-打印-循环)是Clojure开发的核心工具,它允许边写代码边求值,类似热重载。与Shell类比,REPL是语言的交互界面。作者建议新手务必熟悉REPL,避免像写普通语言那样保存后运行整个文件。通过REPL,可以快速测试函数、查看数据格式,甚至与运行中的程序交互,如1988年太空程序死锁的案例所示。

Leiningen与nREPL:编辑器集成的桥梁

文章推荐使用Leiningen启动REPL,它会同时启动nREPL服务器,暴露一个网络端口。nREPL是一套通信协议,允许编辑器通过API与REPL交互,无需手动输入表达式。这为编辑器集成提供了基础,使得在编辑器内直接求值成为可能。作者将Leiningen比作JavaScript的NPM,但强调其供应链安全性更好。

Neovim配置:Conjure与结构化编辑

对于Neovim用户,文章详细介绍了Conjure插件,它支持在编辑器内求值,快捷键如\ee求值当前形式、\eb求值整个Buffer。同时推荐nvim-paredit进行结构化编辑,基于Tree-sitter,提供Slurp、Barf、Drag等操作,高效操作括号。作者指出,虽然学习曲线陡峭,但熟练掌握后编辑Lisp代码的速度会超过一般代码。

❓

Q&A

Clojure 的 REPL 是什么?它有什么作用?

REPL 全称是 Read-Eval-Print-Loop(读取-求值-打印-循环),它读取用户输入,求值,打印结果,然后循环。REPL 是 Clojure 的交互式编程环境,允许你边写代码边测试,类似热重载,能极大提升开发效率。

如何让 Neovim 与 Clojure REPL 集成?

可以使用 Conjure 插件。安装后,用 Leiningen 启动 nREPL 服务器(lein repl),然后在 Neovim 中打开 .clj 文件,Conjure 会自动读取 .nrepl-port 文件并连接。连接成功后,可以用快捷键如 \ee 对当前形式求值,\eb 对整个文件求值。

Leiningen 在 Clojure 开发中起什么作用?

Leiningen 是 Clojure 生态中最常用也最容易上手的工具,聚焦项目自动化和声明式配置。可以用它创建项目、运行项目、运行测试、编译项目等。启动 REPL 时,执行 lein repl 会同时启动 nREPL 服务器,方便编辑器连接。

什么是结构化编辑?在 Neovim 中如何实现?

结构化编辑是指基于代码结构而非纯文本的编辑方式,特别适合 Lisp 的括号操作。在 Neovim 中可以使用 nvim-paredit 插件,它基于 Tree-sitter,提供如 Slurp(吞)、Barf(吐)、Drag(拖拽)等操作,让你高效地移动和修改括号内的元素。

nREPL 是什么?它和普通 REPL 有什么区别?

nREPL 是一套网络通信协议,不是服务器本身。通常服务器是一个 Clojure REPL,客户端可以是终端或编辑器。通过 nREPL,编辑器能自动调用 API 与 REPL 交互,无需手动输入表达式。普通 REPL 是本地命令行交互,而 nREPL 支持网络连接,方便编辑器集成。

在 Clojure 中,println 的返回值是什么?为什么?

println 的返回值是 nil(即 null,表示空值)。它输出到 stdout 的内容(如 Hello world!)只是求值 println 产生的副作用,而不是返回值。

🏷️

标签

➡️

继续阅读