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