On Sunday 01 August 2010 21:34:16 Kyle Schaffrick wrote:

Hi,
  The following technique seems to work for finding out if you've been 
aliased:

(ns somewhere.trial)

(let [here *ns*]
  (defmacro whats-my-name []
     (some (fn [[k v]] (when (= here v) `(quote ~k)))
                (ns-aliases *ns*))))

user> (require '[somewhere.trial :as aliased]) => 
user> (aliased/whats-my-name)                     => aliased

So at the top of with-feature the parser could check for an alias and 
construct the appropriate predicate from the result.

-Andy

> Hello,
> 
> I'm trying to write a library with two main parts. The first is a
> macro, I'll call it 'with-feature, that walks through forms passed
> inside it, and any time it sees a call to another function in my
> library, 'feature, do some transformations.
> 
> The problem I'm concerned about is as follows: When my macro sees 
the
> forms that are passed into it, the symbols come in however the 
consumer
> of the library wrote them. So say I :require my library and alias it to
> 'mylib', then the call 'with-feature is looking for appears as
> 'mylib/feature. Or, I could :use the library, and then it would appear
> as 'feature, or I could alias 'feature to 'banana--you get the idea.
> 
> I don't want to reserve some magic symbol name that defies 
namespace
> rules, so that if the library consumer code uses the symbol 'feature
> to mean something different, they get bizarre results.
> 
> What is a good pattern for writing the "matching" logic in such a
> selectively-transforming macro so that it can properly find the magic
> call it's looking for in the presence of normal namespacing behavior?
> 
> Thanks,
> 
> -Kyle

-- 
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

Reply via email to