On Mar 10, 8:04 pm, stu <stuart.hungerf...@gmail.com> wrote:
> On Mar 11, 8:35 am, Alan <a...@malloys.org> wrote:
> > > Suppose I need mathematical 2D vector functions:
>
> > > (ns geometry.vector)
>
> > > (defstruct vector :x :y)
>
> > > (defn +
> > >         "Add vectors v and w, yielding a vector"
> > >         [ v w ]
> > >         (...))
>
> > > Which leads to the core "vector" function being shadowed by my struct
> > > and the core "+" function shadowed by my function.  What is the
> > > idiomatic Clojure approach for handling this situation?  Is it through
> > > careful use of :require and :import parts of a (ns ...) form?
> > user=> (ns math (:refer-clojure :rename {vector cvector}))
> > nil
> > math=> vector
> > java.lang.Exception: Unable to resolve symbol: vector in this context
> > (NO_SOURCE_FILE:0)
> > math=> (def vector identity)
> > #'math/vector
> > math=> (vector 10)
> > 10
> > math=> (cvector 10)
> > [10]
>
> Thanks for that -- please bear with me on this: does that mean that
> given the flexible options available in the (ns...) form as shown
> here, Clojure developers don't need to choose non-shadowed names like
> <vector> or (defn vector+), but rather use the more natural forms and
> use (ns...) clauses to make everything clear as needed?
>
> Thanks,
>
> Stu

You can write whichever will make your library easier to use and
understand. But do realize if you define something called +, and
someone needs to use your library as well as clojure.core, you are
forcing every user of your library to make a decision about how to
handle the renaming. Arguably this is better than naming it mathy-
vector; that would mean clients don't have to deal with renames, but
it also means it would be harder for them to use your library, or read
code someone *else* wrote using your library with different renames.
It's all a tradeoff, just like everything: the best we can do is tell
you what tools and options you have and let you decide.

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