Clojure:如何判断代码是在 REPL 还是 JAR 中运行?

问题描述

我正在 Clojure 中编写一个名为 OneCLI 的 CLI 框架。这个框架的主要核心部分是一个名为 go! 的函数,它“为你”解析命令行、环境变量和配置文件,并根据这些输入中提供的内容运行几个不同的用户提供的函数之一。

通常,从用户调用 Clojure 程序的 go! 函数调用 -main。例如,我在另一个名为 zic 的“uberjar”样式应用程序中使用我自己的库。函数 go! 调用 System/exit 作为其运行的一部分,向它传递来自用户提供函数结果的退出代码。这在“生产中”效果很好,但这也意味着我无法从 REPL 运行 zic.cli/-main 函数,因为每当我这样做时,它都会调用 System/exit 并且 REPL 退出。

在您询问之前,在树莓派上开发时从 REPL 运行它可以避免运行 lein uberjar/1 分 30 秒运行 clj -X:depstar uberjar :jar ... 所需的昂贵的 45 秒。

我的问题是:是否有一些 var 或值可以作为 Clojure 标准库的一部分进行检查,以告诉我的 OneCLI 代码它是从 REPL 运行还是从 JAR 运行? >

这样的变量将使我能够在 OneCLI 中检测到我们正在从 REPL 运行,从而避免调用 System/exit

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)