Hi,

Am 28.10.2010 um 21:55 schrieb Raoul Duke:

>  i've heard other folks in the Clojure world say that
> if you aren't using macros, then sorta why bother use a Lisp since you
> are missing out on one of the most powerful differentiators.

These people ^^^ should listen carefully to those people vvv.

> i've heard that in CL land, one is told to avoid macros as
> long as possible. Reading about Conj it sounds like some
> folks say stay away from macros if you can.

> any way of teasing out when macros are ok? :-) i mean, are they only
> ok for the internals of the Clojure system?

No. They are perfectly ok for any type of project. It's just a matter of being 
the right tool for the job. Of course it's ok to use them, but please in a 
responsible manner. If you don't need a macro, don't use one. Similar to: if 
you don't need a Ref, don't use one.

Rule of thumb: can you write it as a function, do it. (Add a macro just to 
sugar away any ugliness). If you can't write it as a function, you obviously 
need a macro. Then use one.

Examples:

(with-bindings* {#'foo 5} (fn [] (do stuff))) works well as a function:

(defn with-bindings*
  [bindings thunk]
  (push-thread-bindings bindings)
  (try
    (thunk)
    (finally
      (pop-thread-bindings))))

Just do away the ugliness:

(defmacro with-bindings
  [bindings & body]
  `(with-bindings* ~bindings (fn [] ~...@body)))

To eg. def things you need a macro. Here a function won't work.

Hope this helps.

Sincerely
Meikel

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