我正在尝试隐藏我的命名空间之一中的核心函数。代码的工作原理如下:
核心.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 是否允许这样做,有人可以帮助我吗?多谢!
编辑:这似乎是问题所在,但错误消息确实令人困惑。不管怎样,非常感谢!
您的-main函数缺少参数声明,因此,按照代码所示,它是不合法的。但是,如果添加参数,它会按照标准 Clojure CLI 的预期工作:
seanc@DESKTOP-30ICA76:~/clojure/test.core$ cat src/test/core.clj
(ns test.core
(:refer-clojure :exclude [zero?])
(:require [test.z :refer [zero?]]))
(defn -main [& args]
(prn (zero? 1)))
seanc@DESKTOP-30ICA76:~/clojure/test.core$ cat src/test/z.clj
(ns test.z
(:refer-clojure :exclude [zero?]))
(defn zero? [x] (+ x 1))
seanc@DESKTOP-30ICA76:~/clojure/test.core$ clojure -M -m test.core
2
seanc@DESKTOP-30ICA76:~/clojure/test.core$ clj
Clojure 1.10.2
user=> (require '[test.core])
nil
user=> (test.core/-main)
2
nil
user=>
Run Code Online (Sandbox Code Playgroud)
如您所见,没有任何警告。由于函数中的错误(缺少参数),可能会出现警告-main。也有可能您用来加载/运行代码的任何工具都在做一些错误/不明智的事情——但您没有提供任何相关细节。
| 归档时间: |
|
| 查看次数: |
384 次 |
| 最近记录: |