Clojure REPL:交互式开发
启动一个 Clojure REPL(Read-Eval-Print Loop),你就能立刻执行代码、查看结果、修改逻辑,而无需重新编译整个项目。这种“写一行、跑一行”的方式,让调试和探索变得极其高效。
准备工作:安装 Clojure 工具链
- 访问 https://clojure.org/guides/getting_started 下载官方推荐的
clj工具。 - 打开终端(macOS/Linux 用 Terminal,Windows 用 PowerShell 或 WSL)。
- 运行
clj -h验证安装是否成功。如果看到帮助信息,说明环境已就绪。
注意:不需要安装 Java SDK?Clojure 基于 JVM,但
clj工具会自动管理兼容的 Java 运行时(通常是 Temurin JDK)。若提示缺少 Java,请按指引安装 OpenJDK 11 或更高版本。
启动基础 REPL
- 在终端中输入
clj并回车。 - 等待几秒,你会看到类似以下提示符:
Clojure 1.12.0 user=>此时你已进入 REPL 环境,光标停在
user=>后,等待输入。
执行第一行代码
- 输入
(println "Hello, REPL!")并按回车。 - 观察输出:
Hello, REPL! nil user=>第一行是你打印的内容,第二行
nil是println函数的返回值(Clojure 中所有表达式都有返回值)。
关键点:REPL 会 读取 你输入的表达式 → 求值(执行)→ 打印 结果 → 循环等待下一次输入。
定义并重用变量与函数
- 定义一个变量:
(def x 42)REPL 返回
#'user/x,表示在user命名空间中创建了名为x的变量。 - 使用该变量:
(+ x 8)输出
50。 - 定义一个函数:
(defn square [n] (* n n)) - 调用函数:
(square 7)输出
49。 - 修改函数逻辑(比如改为立方):
(defn square [n] (* n n n)) - 再次调用:
(square 3)现在返回
27—— 无需重启 REPL,新定义立即生效。
加载项目代码到 REPL
真实开发中,你通常有一个项目结构。假设项目根目录如下:
my-app/
├── deps.edn
└── src/
└── my_app/
└── core.clj
其中 deps.edn 内容为:
{:paths ["src"]}
- 在项目根目录下运行
clj启动 REPL。 - 加载你的命名空间:
(require 'my-app.core) - 调用其中的函数(假设
core.clj定义了(defn greet [] "Hi")):(my-app.core/greet)输出
"Hi"。 - 修改
core.clj文件后,重新加载变更:(require 'my-app.core :reload)
提示:使用
:reload参数会强制重新读取文件内容,使代码更新立即反映在 REPL 中。
使用快捷键提升效率
在 REPL 中,你可以使用标准的 readline 快捷键(Linux/macOS 终端通用):
| 功能 | 快捷键 |
|---|---|
| 上一条命令 | ↑ |
| 下一条命令 | ↓ |
| 移动到行首 | Ctrl + A |
| 移动到行尾 | Ctrl + E |
| 删除到行尾 | Ctrl + K |
| 删除到行首 | Ctrl + U |
处理错误与调试
- 故意输入错误代码,例如:
(+ 1 "two") - 阅读错误信息:
Execution error (ClassCastException) at user/eval123 (NO_SOURCE_FILE:1). class java.lang.String cannot be cast to class java.lang.Number错误明确指出:不能把字符串
"two"当作数字使用。 - 利用堆栈追踪定位问题。Clojure 错误会显示完整的调用路径,帮助你快速找到出错位置。
- 重新输入正确代码修正即可,无需退出 REPL。
连接编辑器实现无缝开发(以 VS Code 为例)
- 安装扩展 “Calva”(Clojure 开发专用插件)。
- 打开你的 Clojure 项目文件夹。
- 按下
Ctrl + Alt + C Ctrl + Alt + J(Windows/Linux)或Cmd + Alt + C Cmd + Alt + J(macOS)。 - 选择
Start a Project REPL and Connect。 - 等待Calva 自动启动
clj并建立连接。 - 在任意
.clj文件中选中代码,按下Ctrl + Enter(或Cmd + Enter)直接发送到 REPL 执行。
此时,编辑器与 REPL 深度集成:你可以在代码旁看到实时返回值,修改后一键重载,彻底告别“写-编译-运行”的繁琐循环。
退出 REPL
- 输入
(exit)或(System/exit 0)。 - 或者直接按
Ctrl + D(Unix 系统)或Ctrl + Z回车(Windows)。
user=> (exit)
暂无评论,快来抢沙发吧!