Я понимаю, что форма binding
позволяет восстанавливать динамическое масштабирование в clojure. Пока что единственное, что я видел, используется для ввода/вывода, например, с print
, где *out*
отскакивает от того, что когда-либо писатель хотел бы в это время.
Я хотел бы видеть примеры, которые действительно используют преимущества binding
, где другие объекты действительно не работают. Лично я использовал его только в тех случаях, когда передача объекта, предоставленного пользователем во все функции, была очень утомительной. В основном ситуация, когда я пытаюсь создать контекст, который использует вспомогательные функции. (Подобно этому случаю Когда нужно использовать временную перекодировку-a-special-var idiom в Clojure?). Чтобы быть более конкретным, я полагался на чтобы создать динамическую привязку к *db*
var, чтобы функции базы данных знали, для чего работать. Это было особенно полезно, когда пользователю нужно написать много вложенных вызовов для функций базы данных. Как правило, я в порядке, если мне нужно писать макросы, чтобы сделать вещи проще для себя, но требовать от пользователя сделать это кажется плохой. При этом я стараюсь избегать делать это как можно больше.
Какие еще хорошие примеры использования для "привязки", которые я могу скопировать и включить в свой код?