I understand that the binding
form allows rebindable dynamic scoping in clojure. So far the only uses I've seen it used for is for I/O such as with print
where *out*
is rebound to what ever writer you would like at the time.
I would like to see examples that truly take advantage of the power of binding
where other facilities really don't work. Personally I've only used it in cases where passing around a user supplied object to all the functions was really tedious. Basically a situation where I am trying to create a context that the helper functions uses. (Similar to this case When should one use the temporarily-rebind-a-special-var idiom in Clojure? ) To be more specific, I was relying on the user to create a dynamic binding to the *db*
var to allow the database functions to know what to operate on. This was particularly useful when the user needs to write lots of nested calls to the database functions. Typically, I'm OK if I need to write macros to make things easier for myself, but to require the user to do so seems bad. That being said, I try to avoid doing so as much as possible.
What are some other good use cases for 'binding' that I can copy and incorporate into my code?