Thanks Andy, that was helpful.

In my example foo.bar is in *loaded-libs*

I removed it by calling (clojure.tools.namespace.reload/remove-lib 'foo.bar)

Interestingly when I then did a require I get a different error, the file
is loaded, but the namespace not found.

(require '[foo.bar :as bar])
=> CompilerException java.lang.Exception: namespace 'foo.bar' not found
after loading '/foo/bar', compiling:(*cider-repl foo*:65:7)

Cheers

Mark



On Wed, 20 Dec 2017 at 00:30 Andy Fingerhut <andy.finger...@gmail.com>
wrote:

> I don't have the answer, but perhaps a clue that might lead you to one:
> the function remove-lib inside of the tools.namespace library does this:
>
> (defn remove-lib
>   "Remove lib's namespace and remove lib from the set of loaded libs."
>   [lib]
>   (remove-ns lib)
>   (dosync (alter @#'clojure.core/*loaded-libs* disj lib)))
>
> I suspect that perhaps since in your example REPL session you are not
> doing anything to change clojure.core/*loaded-libs*, that perhaps it still
> contains the namespace name on which you called remove-ns.  *loaded-libs*
> is modified by functions used to implement the behavior of 'require',
> because require tries to avoid re-loading namespaces that have already been
> loaded earlier.
>
> Andy
>
> On Tue, Dec 19, 2017 at 2:14 PM, Mark Melling <
> mark.mell...@savageminds.com> wrote:
>
>> Hi,
>>
>> Apologies in advance for the possibly stupid question!
>>
>> I was having a problem with clojure.tools.namespace.repl/refresh where a
>> namespace that had been successfully loaded subsequently failed to be
>> reloaded when doing a repl/refresh.
>>
>> Whilst investigating the problem, (this is probably totally unrelated to
>> my issue), I realised I didn't understand how remove-ns and require
>> actually work.
>>
>> To illustrate this I did the following:
>>
>> (require '[foo.bar :as bar])
>> => nil
>> (remove-ns 'foo.bar)
>> => #namespace[foo.bar]
>> (require '[foo.bar :as bar])
>> => CompilerException java.lang.Exception: namespace 'foo.bar' not found,
>> compiling:(*cider-repl foo*:30:7)
>>
>>
>>
>>
>> So what does remove-ns do to cause the second require to fail?
>>
>>
>>
>> Thanks
>>
>> Mark
>>
>>
>> --
>> 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
>> ---
>>
> You received this message because you are subscribed to the Google Groups
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to clojure+unsubscr...@googlegroups.com.
>
>
>> For more options, visit https://groups.google.com/d/optout.
>>
> --
> 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
> ---
> You received this message because you are subscribed to a topic in the
> Google Groups "Clojure" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/clojure/YEY7lbrNB2w/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to