使用 Incanter 的 Clojure 项目中的函数命名空间冲突

Function Namespace Conflicts in Clojure Project with Incanter

提问人:user3523406 提问时间:11/16/2023 更新时间:11/16/2023 访问量:41

问:

我目前正在阅读 Eric Rochester 的“Clojure Data Analysis Cookbook”,并遇到了涉及 abs 函数的命名空间冲突问题。我使用 Leiningen 设置了我的项目,并包含了 incanter(版本 1.9.3)的依赖项。但是,当我尝试在 REPL 中要求 incanter.core 和 incanter.io 命名空间时,我收到一系列关于重新定义 abs 函数的警告。

这是我所做的:

  1. 使用 创建了一个新项目。lein new data-eric

  2. 添加了 Incanter 依赖项:project.clj

    [incanter/incanter-core “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 命名空间 leiningen incanter

评论

1赞 Harold 11/16/2023
该警告可以安全地忽略 - 添加到比该库更新更新的最近:github.com/clojure/clojure/blob/...absclojure.core

答:

3赞 amalloy 11/16/2023 #1

这些警告不是给你的,确切地说,它们是给 的作者的,据编译器所知,那可能就是你。core.matrix 在一年半前进行了更新以解决这些警告,但这并不能完全帮助您:Incanter 很旧,在过去五年中根本没有更新过,因此它依赖于旧版本的 core.matrix。我会忽略这些错误消息:如果你真的很热衷于,你可能会找到一种方法来依赖较新版本的 core.matrix,同时仍然使用旧的 Incanter,但版本倾斜会带来自己的风险。clojure.core.matrix.impl.mathsops

评论

0赞 user3523406 11/16/2023
有没有咒语替代品?
0赞 James Elliott 11/17/2023
真的不需要;Clojure 库倾向于达到一个良好的工作点并保持稳定。您可以请求作者更新其依赖项以消除这些警告。我能够为我自己的项目使用的一些库做到这一点。
0赞 James Elliott 11/17/2023
但是人们告诉你,你也可以忽略警告,因为你可以忽略警告。他们不认为任何事情都可能破裂。该代码被设计为使用该命名空间中存在的版本,并且 Clojure 现在提供自己的版本并不重要。abs
0赞 user2609980 11/22/2023
@user3523406在克洛朱里安·斯拉克(Clojurians Slack)的 #data 科学中问道。