我目前正在阅读 Eric Rochester 编写的“Clojure 数据分析手册”,并且遇到了涉及 abs 函数的命名空间冲突问题。我使用 Leiningen 设置了我的项目,并包含了 incanter(版本 1.9.3)的依赖项。但是,当我尝试在 REPL 中要求 incanter.core 和 incanter.io 命名空间时,我收到一系列有关重新定义 abs 函数的警告。
这就是我所做的:
使用
lein new data-eric
创建了一个新项目。
向
project.clj
添加了 Incanter 依赖项:
[incanter/incanter-核心“1.9.3”] [incanter/incanter-io“1.9.3”]
在 VS Code 中启动 REPL
command + shift + P: Start a Project REPL and Connect -> Leiningen
并运行以下命令:
(require '[incanter.core :as ic]
'[incanter.io :as io])
这导致了多个警告,所有警告都与在各种命名空间中重新定义的 abs 函数有关,例如 clojure.core.matrix.impl.mathsops、clojure.core.matrix.protocols 和 incanter.core。
警告示例:
WARNING: abs already refers to: #'clojure.core/abs in namespace: clojure.core.matrix.impl.mathsops, being replaced by: #'clojure.core.matrix.impl.mathsops/abs
我知道这是由于多个命名空间中存在 abs 函数,但我不确定处理这些警告的最佳方法。我是否应该担心这些警告会影响我的项目的功能?是否有推荐的方法来解决或解决此问题?
任何指导或建议将不胜感激。预先感谢您!
这些警告并不是针对您的,确切地说 - 它们是针对
clojure.core.matrix.impl.mathsops
的作者的,据编译器所知,那可能就是您。 core.matrix 已更新以解决这些警告一年半前,但这并不能完全帮助您:Incanter 很旧,并且在过去五年中根本没有更新过,所以它依赖于旧的core.matrix 的版本。我会忽略这些错误消息:如果您真的很热衷,您可能会找到一种方法来依赖较新版本的 core.matrix,同时仍然使用旧的 Incanter,但版本偏差会带来其自身的风险。