I ran into the same situation as Chris yesterday with clojure.contrib.seq-utils as well as with clojure.contrib.str-utils. The explanation is very timely for me and much appreciated.
- John On Mon, Aug 30, 2010 at 4:05 PM, Robert McIntyre <r...@mit.edu> wrote: > Sorry, I was tired and didn't explain very well. > > Right now you have a "naked" > (:use clojure.contrib.seq-utils) > somewhere. > > You want to use partition-by, but that's already in core, so you might > just get rid of the :use altogether. > > But maybe there are some other functions in seq-utils that you do want > to use --- in that case, do > (:use [clojure.contrib [seq-utils :only [functions you want]]]) > or > (:use [clojure.contrib [seq-utils :only []]]) > > to avoid stepping on core and also to document what you actually use. > > If you really want the seq-utils version of partition-by, then you can do: > > (:use [clojure.contrib [seq-utils :as whatever]]) > whatever/partition-by > > And if you really want to replace the core version with the seq > version without any namespacing, do > > (:refer-clojure :exclude [partition-by]) > (:use [clojure.contrib [seq-utils :only [partition-by]]]) > > does that help? > > --Robert McIntyre > > > > > > > On Mon, Aug 30, 2010 at 2:43 PM, Chris Jenkins <cdpjenk...@gmail.com> > wrote: > > How would using the :only keyword help here? Just to be clear, the > problem > > here is that attempting to load my source file the second time fails > > (loading the first time having succeeded, albeit with a few warnings > about > > replacing symbols from clojure.core), which makes it very difficult for > me > > to use swank-clojure, for example, because I can't hit C-c C-k twice on > the > > same file. > > Here is the failure when I try to load the file for the second time: > > java.lang.IllegalStateException: partition-by already refers to: > > #'clojure.contrib.seq-utils/partition-by in namespace: test.core > > (core.clj:1) > > So here's my main question: If I'm working in the REPL and I edit a file > > that I've preu'vviously loaded, how can I cause the file to be reloaded > without > > hitting that error? If my .clj file doesn't :use any other clojure > modules > > then reloading works fine but, if it imports anything, then the second > > (load-file...) fails. > > On 30 August 2010 11:05, Robert McIntyre <r...@mit.edu> wrote: > >> > >> Yeah, they changed that from clojure 1.1 and it's really annoying --- > >> as far as I know, your only options right now are to either select > >> exactly which functions > >> from seq-utils you want using the :only keyword, or if you really want > >> to use the seq-utils version > >> you can use refer-clojure and the :exclude keyword. Or, you can use > >> the :as keyword in the :use form > >> to qualify the import so that you don't actually replace anything. > >> > >> If you accidently get this warning and don't want to restart the repl > >> you can do > >> (ns-unmap 'your-namespace 'offending-function), fix the naked import, > >> and reload. > >> > >> --Robert McIntyre > >> > >> > >> > >> > >> On Mon, Aug 30, 2010 at 5:54 AM, Chris Jenkins <cdpjenk...@gmail.com> > >> wrote: > >> > Since I switched to Clojure 1.2, I see an error message whenever I try > >> > to > >> > reload a source file that imports anything. The error message is of > the > >> > form > >> > "xxxx already refers to xxx", as though it is complaining that it > can't > >> > import the same thing twice. > >> > For example, I have a minimal source file that looks like this: > >> > (ns test.core > >> > (:use clojure.contrib.seq-utils)) > >> > I can load it (once!) into the Clojure REPL successfully: > >> > $ java -cp lib/clojure-contrib-1.2.0.jar:lib/clojure-1.2.0.jar > >> > clojure.main > >> > Clojure 1.2.0 > >> > user=> (load-file "src/test/core.clj") > >> > WARNING: partition-by already refers to: #'clojure.core/partition-by > in > >> > namespace: test.core, being replaced by: > >> > #'clojure.contrib.seq-utils/partition-by > >> > WARNING: frequencies already refers to: #'clojure.core/frequencies in > >> > namespace: test.core, being replaced by: > >> > #'clojure.contrib.seq-utils/frequencies > >> > WARNING: shuffle already refers to: #'clojure.core/shuffle in > namespace: > >> > test.core, being replaced by: #'clojure.contrib.seq-utils/shuffle > >> > WARNING: reductions already refers to: #'clojure.core/reductions in > >> > namespace: test.core, being replaced by: > >> > #'clojure.contrib.seq-utils/reductions > >> > WARNING: partition-all already refers to: #'clojure.core/partition-all > >> > in > >> > namespace: test.core, being replaced by: > >> > #'clojure.contrib.seq-utils/partition-all > >> > WARNING: group-by already refers to: #'clojure.core/group-by in > >> > namespace: > >> > test.core, being replaced by: #'clojure.contrib.seq-utils/group-by > >> > WARNING: flatten already refers to: #'clojure.core/flatten in > namespace: > >> > test.core, being replaced by: #'clojure.contrib.seq-utils/flatten > >> > nil > >> > If I try to reload it then I see an error message: > >> > user=> (load-file "src/test/core.clj") > >> > java.lang.IllegalStateException: partition-by already refers to: > >> > #'clojure.contrib.seq-utils/partition-by in namespace: test.core > >> > (core.clj:1) > >> > user=> > >> > This error message is seen even if I edit the source file and remove > the > >> > (:use ...) clause and then try to load the file again. > >> > Anyone have any idea what is going on? I didn't see this behaviour in > >> > Clojure 1.1 and it would be nice if I could find a way to reload files > >> > that > >> > I'm working on. > >> > Cheers, > >> > Chris > >> > > >> > -- > >> > You received this message because you are subscribed to the Google > >> > Groups "Clojure" group. > >> > To post to this group, send email to clojure@googlegroups.com > >> > Note that posts from new members are moderated - please be patient > with > >> > your > >> > first post. > >> > To unsubscribe from this group, send email to > >> > clojure+unsubscr...@googlegroups.com<clojure%2bunsubscr...@googlegroups.com> > >> > For more options, visit this group at > >> > http://groups.google.com/group/clojure?hl=en > >> > >> -- > >> You received this message because you are subscribed to the Google > >> Groups "Clojure" group. > >> To post to this group, send email to clojure@googlegroups.com > >> Note that posts from new members are moderated - please be patient with > >> your first post. > >> To unsubscribe from this group, send email to > >> clojure+unsubscr...@googlegroups.com<clojure%2bunsubscr...@googlegroups.com> > >> For more options, visit this group at > >> http://groups.google.com/group/clojure?hl=en > > > > -- > > You received this message because you are subscribed to the Google > > Groups "Clojure" group. > > To post to this group, send email to clojure@googlegroups.com > > Note that posts from new members are moderated - please be patient with > your > > first post. > > To unsubscribe from this group, send email to > > clojure+unsubscr...@googlegroups.com<clojure%2bunsubscr...@googlegroups.com> > > For more options, visit this group at > > http://groups.google.com/group/clojure?hl=en > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com<clojure%2bunsubscr...@googlegroups.com> > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en