我是 Clojure 的新手,试图用函数调试我的程序trace。
我在 REPL 中试过这个:
(require '[clojure.tools.trace :as trace])
Run Code Online (Sandbox Code Playgroud)
但它抛出一个异常:
Execution error (FileNotFoundException) at user/eval199 (REPL:1).
Could not locate clojure/tools/trace__init.class, clojure/tools/trace.clj or clojure/tools/trace.cljc on classpath.
Run Code Online (Sandbox Code Playgroud)
*e 是这样说的:
#error {
:cause "Could not locate clojure/tools/trace__init.class, clojure/tools/trace.clj or clojure/tools/trace.cljc on classpath."
:via
[{:type java.io.FileNotFoundException
:message "Could not locate clojure/tools/trace__init.class, clojure/tools/trace.clj or clojure/tools/trace.cljc on classpath."
:at [clojure.lang.RT load "RT.java" 462]}]
:trace
[[clojure.lang.RT load "RT.java" 462]
[clojure.lang.RT load "RT.java" 424]
[clojure.core$load$fn__6839 invoke "core.clj" 6126]
[clojure.core$load invokeStatic "core.clj" 6125]
[clojure.core$load doInvoke "core.clj" …Run Code Online (Sandbox Code Playgroud) 我正在尝试隐藏我的命名空间之一中的核心函数。代码的工作原理如下:
核心.clj:
(ns test.core
(:refer-clojure :exclude [zero?])
(:require [test.z :refer [zero?]]))
(defn -main
(prn (zero? 1)))
Run Code Online (Sandbox Code Playgroud)
z.clj:
(ns test.z
(:refer-clojure :exclude [zero?]))
(defn zero? [x] (+ x 1))
Run Code Online (Sandbox Code Playgroud)
运行时,显示错误信息:
; (err) WARNING: zero? already refers to: #'clojure.core/zero? in namespace: test.z, being replaced by: #'test.z/zero?
Run Code Online (Sandbox Code Playgroud)
我不确定 Clojure 是否允许这样做,有人可以帮助我吗?多谢!
编辑:这似乎是问题所在,但错误消息确实令人困惑。不管怎样,非常感谢!