如何检查 Clojure 代码是否在 REPL 中被评估?

noz*_*iar 6 clojure leiningen

我想根据我的代码是从 REPL 运行还是运行编译后的 jar 来以不同的方式格式化我的日志。

有没有简单的方法可以做到这一点?我在想也许 Leiningen 在运行 REPL 时会在某处留下痕迹。

Alf*_*iao 4

(defn current-stack-trace []
      (.getStackTrace (Thread/currentThread)))

(defn is-repl-stack-element [stack-element]
      (and (= "clojure.main$repl" (.getClassName  stack-element))
           (= "doInvoke"          (.getMethodName stack-element))))

(defn is-in-repl []
      (some is-repl-stack-element (current-stack-trace)))

(defn my-log [msg]
      (if (is-in-repl)
          (prn (str "RUNNING IN REPL : " msg))
          (prn msg)))
Run Code Online (Sandbox Code Playgroud)