2010-09-26 21 views
1

J'ai essayé de migrer un projet de clojure 1.1 à 1.2 à cause des nouveaux protocoles introduits en 1.2. Mais quand j'essaye de :use clojure-contrib.duck-streams, je reçois un avertissement à propos de 'spit' qui existe déjà dans clojure.core. Le même problème avec clj-time.core et 'extend' qui existe aussi dans clojure.core. Est-ce que quelqu'un peut expliquer ce qui serait le moyen le plus élégant autour de ces erreurs stupides?Comment inclure clj-time et clojure.contrib sous clojure 1.2?

BTW: de mon 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"]] 

Répondre

3

Vous pouvez vous débarrasser de l'extension d'avertissement (ou erreur?) En mettant (:refer-clojure :exclude [extend]) dans votre (ns ..). J'ai soumis un correctif pour corriger cela il y a un moment. Je suppose qu'ils n'ont jamais mis un nouvel instantané pour ça. En ce qui concerne le bit canard-streams, c'est parce que spit était dans les canards, mais maintenant dans clojure.core. Découvrez clojure.java.io. La plupart des fonctionnalités de canard-stream ont été couronnées dans Clojure 1.2. Si vous ne voulez pas utiliser clojure.java.io, l'avertissement craché est relativement inoffensif, mais vous pouvez le supprimer en l'excluant simplement lorsque vous utilisez clojure.contrib.duck-streams (qui est aussi clojure.contrib.io à présent).

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

Voici quelques API docs pour clojure.java.io: http://clojuredocs.org/Clojure%20Core/clojure.java.io. Au moment de la rédaction de ce document, il ne semble pas y avoir de documents pour cela au http://clojure.github.com/clojure/. Aucune idée pourquoi.

0

Importe tout sauf la fonction à l'origine du conflit. Ensuite, la broche se référer à la version qui a été mis en clojure.core, ce qui est probablement la version préférée

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

La ns forme macro est:

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

Bien que certaines de ces informations sont correctes, le canard -streams a été retiré de contrib et ne sera plus disponible après 1.2. Il n'y a vraiment pas grand-chose dans les canards que vous ne pouvez pas faire dans le noyau de Clojure.