On Wed, Dec 2, 2015 at 8:11 AM, gianluca torta <giato...@gmail.com> wrote:
> for some reason, it looks like the implementation of the ns macro assumes > that the macro itself is being defined in namespace clojure.core > > try defining myns in the namespace clojure.core, and it should work > Thanks, Gianluca. I tried that but def macros don't seem to respect rebinding *ns*. (ns foo) (println *ns*) ;; => #object[clojure.lang.Namespace 0x73eb2c69 foo] (binding [*ns* (create-ns 'clojure.core)] (println *ns*) ;; => #object[clojure.lang.Namespace 0x255f1d1 clojure.core] (def bar "i should be in clojure.core!") (println (var bar))) ;; => #'foo/bar I also tried in-ns and with-redefs to no avail. Interning seems to work: (ns foo) (defmacro co-ns ... code from clojure.core/defmacro ns...) (intern 'clojure.core (with-meta 'co-ns {:macro true}) @#'co-ns) This puts the co-ns macro in clojure.core, but I still have to qualify the call: foo/co-ns or clojure.core/co-ns. I haven't been able to get (co-ns ...) to work at top of file, but maybe it's better to qualify it anyway. In the end it's embarrasingly simple: ;; foo.clj (ns foo) (defmacro co-ns [name & references] ;; customizing code here... (doseq [ref references] (println ref)) `(ns ~name ~@references) ;; ... and here (println "hello CONS")) (intern 'clojure.core (with-meta 'co-ns {:macro true}) @#'co-ns) and the interning bit isn't even necessary. This makes it easy to add ref keywords, e.g. (foo/co-ns (:require ...) (:my-ref ...)) Thanks, Gregg -- 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.