Yes this is a good point, but how can I avoid this blowing up problem if I'm not handling a single variable (just as the code in my last post)?
On 12月16日, 上午5时09分, Cedric Greevey <cgree...@gmail.com> wrote: > On Thu, Dec 15, 2011 at 1:54 PM, Alan Malloy <a...@malloys.org> wrote: > > This will print all the debug information at compile time, which is > > usually not what you want. I have a little macro I use called ?, which > > looks like: > > > (defmacro ? [x] > > `(let [x# ~x] > > (prn '~x '~'is x#) > > x#)) > > > You could add file and line information to this fairly simply: > > > (defmacro ? [x] > > (let [line (:line (meta &form)) > > file *file*] > > `(let [x# ~x] > > (println (pr-str '~x) "is" (pr-str x#) > > (str "; (" ~file ":" ~line ")")) > > x#))) > > > And use it like so: > > > user> (let [x 10] > > (+ 5 (? x))) > > x is 10 ; (NO_SOURCE_FILE:1) > > 15 > > You might want to change > > (pr-str x#) > > to something like > > (pr-str > (if (seq? x#) > (let [s (Object.)] > (if (= (nth x# 11 s) s) > x# > (concat (take 10 x#) ['...]))) > x#)) > > which will print sequences longer than ten elements as (1 2 3 4 5 6 7 > 8 9 10 ...) and prevent infinite seqs from blowing things up. Or more > generally you might want to go through pprint which lets you set > *print-len* and *print-level* to generally control the printing of > very large and/or deeply-nested structures. But that adds a new > dependency that needs to be required anywhere you use the macro ... -- 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