Thanks Alex. I asked because I thought it might be part of stable API.
Thanks for your tip on slime (I do use slime) also. I will wait for it to
become part of stable api.
Sunil.

On Sat, Dec 4, 2010 at 9:29 AM, Alex Osborne <a...@meshy.org> wrote:

> Sunil S Nandihalli <sunil.nandiha...@gmail.com> writes:
>
> > I really like the &env. It has saved a lot of tedious work a couple of
> > times .. but I have only found use for the keys of the map that gets
> > passed like in the following example.
>
> > I don't understand what the val part of the map contains? I have
> > failed at attempts to figuring it out.. Can somebody tell me what the
> > val part contains and how one could use it?
>
> It contains a LocalBindings object which the compiler uses internally to
> keep track of a local binding.  Note that unlike the keys, the values of
> &env are not a stable API, they're implementation details and may well
> change.  When he added &env I think Rich said he'd look at giving the
> values of &env a proper API as part of the future Clojure in Clojure
> compiler.
>
> But you can poke at them like this:
>
> (defmacro foo []
>  (def lb (first (vals &env))))
>
> (let [a (+ 1 3)]
>  (foo))
>
> (.sym lb)
> ;; a
>
> (.idx lb)
> ;; 1
>
> (.name lb)
> ;; "a"
>
> (.isArg lb)
> ;; false
>
> (.canBeCleared lb)
> ;; true
>
> (.init lb)
> ;; #<StaticMethodExpr
> ;; clojure.lang.compiler$staticmethode...@1a9d267d>
>
> (.args (.init lb))
> ;; [#<ConstantExpr clojure.lang.compiler$constante...@51d2bb9f>
> ;;  #<ConstantExpr clojure.lang.compiler$constante...@621bedb0>]
>
>
> If you're using Emacs + SLIME, the SLIME inspector is quite useful for
> exploring unknown values.  After evaling the first two forms above, put
> the cursor over "lb" and press C-c I (note that's shift + i).  You'll
> get something like this:
>
> clojure.lang.compiler$localbind...@25de152f
> --------------------
> Type: class clojure.lang.Compiler$LocalBinding
> Value: clojure.lang.compiler$localbind...@25de152f
> ---
> Fields:
>  sym: a
>  tag:
>  init: clojure.lang.compiler$staticmethode...@1a9d267d
>  idx: 1
>  name: a
>  isArg: false
>  clearPathRoot: clojure.lang.compiler$pathn...@1740d415
>  canBeCleared: true
>
> You can then press enter on any of the field values or class names to
> get more detail about them.
>
> --
> 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<clojure%2bunsubscr...@googlegroups.com>
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en

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