djh*_*987 2 clojure leiningen read-eval-print-loop deps-edn
我正在 Clojure 中编写一个名为OneCLI的 CLI 框架。该框架的主要中心部分是一个名为的函数go!,它“为您”解析命令行、环境变量和配置文件,并根据这些输入中提供的内容运行几个不同的用户提供的函数之一。
通常,go!从-main用户调用 Clojure 程序的函数中调用。我用我自己的库,例如,在另一个叫“uberjar”风格应用ZIC。该函数作为其运行的一部分进行go!调用System/exit,并向其传递来自用户提供的函数结果的退出代码。这在“生产中”效果很好,但这也意味着我无法zic.cli/-main从 REPL运行该函数,因为每当我调用它时System/exit并且 REPL 退出时。
在你问之前,在树莓派上开发时从 REPL 运行它可以避免昂贵的 45 秒运行lein uberjar/1 分 30 秒运行clj -X:depstar uberjar :jar ...。
我的问题是:是否有一些 var 或 value 我可以检查作为 Clojure 标准库的一部分,告诉我的 OneCLI 代码它是从 REPL 运行还是从 JAR 运行?
这样的变量将使我能够在 OneCLI 中检测到我们正在从 REPL 运行,以便它可以避免调用System/exit.
与其试图让一个函数神奇地检测您正在运行的环境,不如让两个行为不同的函数变得非常简单。
-main. 叫它run什么的。-main调用该函数,然后调用System/exitrun而不是-main. 它将正常完成,而不是调用System/exit.| 归档时间: |
|
| 查看次数: |
374 次 |
| 最近记录: |