由于1.2中引入了新协议,我尝试将项目从clojure 1.1迁移到1.2。但是当我尝试:use
clojure-contrib.duck-streams时,我得到一个关于'spit'的警告,这已经存在于clojure.core中。与clj-time.core和'extend'相同的问题也存在于clojure.core中。
任何人都可以解释围绕这些愚蠢错误的最优雅方式吗?
BTW:来自我的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"]]
答案 0 :(得分:3)
您可以将(:refer-clojure :exclude [extend])
放入(ns ..)
,以消除延迟警告(或错误?)。我提交了一个修补程序来解决这个问题。猜猜他们从来没有为它制作新的快照。
对于duck-stream位,这是因为spit
曾经是在duck-streams中,但现在是在clojure.core中。看看clojure.java.io。在Clojure 1.2中,大多数duck-stream的功能都达到了顶峰。如果您不想使用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/似乎没有任何文档可用。不知道为什么。
答案 1 :(得分:1)
虽然其中一些信息是正确的,但是已经从contrib中删除了duck-streams,并且在1.2之后将不再存在。无论如何,在核心Clojure中你还没有做过很多鸭子流。
答案 2 :(得分:0)
导入除导致碰撞的函数之外的所有内容。然后spit将引用被带入clojure.core的版本,这可能是首选版本
(use '[clojure.contrib.duck-streams :exclude 'spit])
ns宏形式是:
(ns foo (:use [clojure.contrib.duck-streams :exclude 'spit]))