On Sun, Dec 13, 2009 at 7:55 PM, Stephen C. Gilardi <squee...@mac.com> wrote: > > On Dec 13, 2009, at 6:54 PM, Stuart Halloway wrote: > >> That's great. I wouldn't have expected it to work. Do you think this is by >> design or coincidental/subject to change? > > The expression I gave was: > > �...@#'clojure.core/spread > > equivalent to: > > (deref (var clojure.core/spread)) > > I see now that the simpler expression: > > #'clojure.core/spread > > equivalent to > > (var clojure.core/spread) > > also works: > > user=> (#'clojure.core/spread [:a [:b :c]]) > (:a :b :c) > > I think it's by design that privacy is enforced during symbol resolution but > not during var lookup, var deref, or var invoke. It would be (somewhat) > complicated and slow for any of the latter 3 to allow using the var from > within its home namespace but not from within another namespace. > > However, I'm not aware of this behavior being explicitly documented so if the > code relying on it must be future-proof, I recommend checking with Rich.
I'd like a ruling on this as well. It solves a real problem of macros getting access to helper functions, so if we shouldn't be relying on it, a reliable solution would be desirable. This technique is actually used in the "new" branch in core_deftype.clj so that the 'defprotocol' macro can expand into a usage of a private fn 'assert-same-protocol'. But that doesn't necessarily prove it's an acceptible solution. --Chouser -- 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