1

由于 1.2 中引入了新协议,我尝试将项目从 clojure 1.1 迁移到 1.2。但是,当我尝试:useclojure-contrib.duck-streams 时,我会收到关于 clojure.core 中已经存在的“spit”的警告。clj-time.core 和 clojure.core 中也存在“extend”的问题相同。

谁能解释解决这些愚蠢错误的最优雅的方法是什么?

顺便说一句:来自我的project.clj

 :dependencies [[org.clojure/clojure "1.2.0"]
                [org.clojure/clojure-contrib "1.2.0"]
                [clojure-csv/clojure-csv "1.1.0"]
                [org.shxiao/clojureql "1.0.0"]
                [clj-time "0.1.0-SNAPSHOT"]]
4

3 回答 3

3

您可以通过(:refer-clojure :exclude [extend])(ns ..). 我提交了一个补丁来解决这个问题。猜猜他们从来没有为它发布新的快照。

至于duck-streams 位,因为spit以前在duck-streams 中,但现在在clojure.core 中。查看 clojure.java.io。鸭流的大部分功能都在 Clojure 1.2 中达到了顶峰。如果您不想使用 clojure.java.io,吐出警告是相当无害的,但是可以通过在使用 clojure.contrib.duck-streams(也是 clojure.contrib.io现在)。

(ns foo (:use [clojure.contrib.duck-streams :exclude [spit]]))

以下是 clojure.java.io 的一些 API 文档:http: //clojuredocs.org/Clojure%20Core/clojure.java.io在撰写本文时, http: //clojure.github.com/clojure/ 上似乎没有任何文档。不知道为什么。

于 2010-09-26T15:53:27.930 回答
1

虽然其中一些信息是正确的,但duck-streams 已从 contrib 中删除,并且在 1.2 之后将不再存在。无论如何,您在核心 Clojure 中确实无法在鸭流中做很多事情。

于 2011-03-25T13:25:55.193 回答
0

导入除导致冲突的函数之外的所有内容。然后 spit 会引用 clojure.core 中引入的版本,这可能是首选版本

(use '[clojure.contrib.duck-streams :exclude 'spit])

ns 宏形式为:

(ns foo (:use [clojure.contrib.duck-streams :exclude 'spit]))
于 2010-09-26T15:57:54.173 回答