【问题标题】:How to include clj-time and clojure.contrib under clojure 1.2?如何在 clojure 1.2 下包含 clj-time 和 clojure.contrib?
【发布时间】:2010-09-26 15:41:37
【问题描述】:

由于 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"]]

【问题讨论】:

    标签: clojure clojure-contrib


    【解决方案1】:

    您可以通过将(: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/ 上似乎没有任何文档。不知道为什么。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        ns宏形式为:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-13
          • 2014-09-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多