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

问题描述 投票:0回答:1

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

这就是我所做的:

  1. 使用

    lein new data-eric
    创建了一个新项目。

  2. 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 namespaces leiningen incanter
1个回答
0
投票

这些警告并不是针对您的,确切地说 - 它们是针对

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

© www.soinside.com 2019 - 2024. All rights reserved.