Hi Daniel

map is creating a lazy seq, which isn't evaluated until the REPL's
forces it to be printed, which is outside the scope of the binding.

This:

(binding [*funkybind* true]
  (doall (map (fn [_] *funkybind*) [1 2])))

forces evaluation inside the binding, and does what you want.

This is something I've been bitten by a few times, but the power that
lazyness brings ends up being worth it, IMHO.

Good luck!

Travis

On Mon, Apr 22, 2013 at 9:41 PM, Daniel Higginbotham
<nonrecurs...@gmail.com> wrote:
> I've encountered a situation where the binding function doesn't work as I
> expect it:
>
> user> (def ^:dynamic *funkybind* false)
>
> ;; expected
> user> (binding [*funkybind* true]
>   *funkybind*)
> true
>
> ;;expected
> (binding [*funkybind* true]
>   ((fn [] *funkybind*)))
> true
>
> ;;... huh?
> (binding [*funkybind* true]
>   (map (fn [_] *funkybind*) [1 2]))
> (false false)
>
> In the last example, why is the value of *funkybind* false instead of true?
>
> Thanks!
> Daniel
>
> --
> --
> 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
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to