Hi, the behavior you describe is not specific to macros, but is due to the use of aliases
after: (require '[foo.bar :as b]) this will give you false: (= 'foo.bar/x (first '(b/x))) while this will give you true: (= 'foo.bar/x (first '(foo.bar/x))) one way to solve it, is comparing the resolved vars instead of the names: (= (resolve 'foo.bar/x) (resolve (first '(b/x)))) ;=>true (= (resolve 'foo.bar/x) (resolve (first '(foo.bar/x)))) ;=>true hth, Gianluca On Saturday, October 3, 2015 at 3:03:49 PM UTC+2, Andrey Antukh wrote: > > Hi! > > I have a little trouble writing a macro because I'm getting unexpected > (for me) behavior. > > Let see some code: > > (ns foo.bar) > > (defn debug > [x] > (println "debug:" x) > x) > > (defn debug-expr? > [expr] > (and (seq? expr) > (symbol? (first expr)) > *(= 'foo.bar/debug (first expr))*)) > > (defmacro without-debug > [& body] > (let [body' (reduce (fn [acc v] > (if (debug-expr? v) > (conj acc (second v)) > (conj acc v))) > [] body)] > `(do > ~@body'))) > > > And then I use it from other namespace: > > (ns foo.baz) > > (require '[foo.bar :as b]) > > (macroexpand '(b/without-debug (b/debug 3))) > ;; => (do (b/debug 3)) > > (macroexpand '(b/without-debug (foo.bar/debug 3))) > ;; =>(do 3) > > I expect that the both expressions will evaluate to the same result, but > is not. Seems that symbols inside macros are not fully qualified. It there > any way to get them fully qualified? I'm missing something? > > Any help is welcome! > > Thank you very much. > > Andrey > -- > Andrey Antukh - Андрей Антух - <ni...@niwi.nz <javascript:>> > http://www.niwi.nz > https://github.com/niwinz > -- 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.