On Thu, Apr 15, 2010 at 6:27 AM, Joost <jo...@zeekat.nl> wrote:
> But on the master branches I get:
>
> $ java -server -Djava.net.preferIPv4Stack=true  -Dpid=30893 -
> Djava.awt.headless=true -cp /home/joost/lib/clojure/clojure-1.2.0-
> master-SNAPSHOT.jar:/home/joost/lib/clojure-contrib/clojure-
> contrib.jar clojure.main
> Clojure 1.2.0-master-SNAPSHOT
> user=> (use 'clojure.contrib.sql)
> nil
> user=>  (binding [clojure.contrib.sql/do-commands #(prn %)
>          clojure.contrib.sql/do-prepared #(prn %1 %2)]
>          (do-commands "bla"))
> java.lang.Exception: no current database connection (NO_SOURCE_FILE:0)
>
> It looks like I can't bind do-commands... But this works:

This is due to a little-known feature in the current git master called
direct binding. Basically the value of any var bound to a function
inside any namespace beginning with "clojure" is fixed at compile
time, so there's no way to rebind it.

It's intended to give a performance boost since the step of var lookup
may be skipped, but it also has the side-effect of making you think
you're going a little crazy if you don't know about it. Unfortunately
right now there's no way to opt-out, though we've discussed some
mechanisms that might allow that in the future. It sounds like it
might get turned back off before 1.2 is released:

http://www.assembla.com/spaces/clojure/tickets/271-determine-direct-binding-policy-and-controls

The only workaround right now is to create your own function that
wraps the function you're trying to rebind and rebind your wrapper
instead.

-Phil

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