Я пишу библиотеку Clojure, и мне интересно, что лучше всего подходит для настройки параметров конфигурации библиотеки.Как установить параметры конфигурации в библиотеке clojure?
Многие библиотеки (например, в clojure-contrib) используют глобальный параметр уровня, например *buffer-size*
, который пользователь может установить, позвонив по телефону set!
. Но для меня это не лучший способ создать глобальное состояние, и есть вероятность столкновения имен.
Другой способ - передать параметры в каждом вызове функции, который зависит от них. Если есть много параметров, тогда их можно использовать вместо передачи отдельных.
В качестве примера предположим, что я пишу библиотеку кеша.
Используя первый подход у меня есть глобальные параметры, такие как *cache-size*, *expiry-time*, *cache-dir*
и т.д. Пользователь set!
с этим (или нет, и пусть они будут по умолчанию) и вызывают функцию, как (set-in-cache id obj)
и (get-from-cache id)
.
Используя второй подход, пользователь сначала создать карту параметров и передает его на каждый звонок
(def cache-parameters {:cache-size 1000
:expiry-time: 1440
:cache-dir "c:\\cache"})
(set-in-cache cache-parameters id obj)
(get-from-cache cache-parameters id)
Итак, какой способ является предпочтительным способом в Clojure и почему?
Это последний бит * точно * что я сделал в clj-github и gotmilk. Удивительно знать, что я, возможно, сделал что-то правильно! – Rayne
'он может сделать для более здравого кода, чтобы определить earmuffed Var ...' Можете ли вы привести пример? –
@Rayne: ;-) @ abhin4v: Фактически '* buffer-size *', который вы упоминаете в вопросе, является хорошим примером использования Var для «разумного умолчания», который иногда может быть отскок по коду клиента. Что касается перекоса корневого значения Var, Congomongo (библиотека Clojure MongoDB) использует 'alter-var-root' в Var, который называется' * mongo-config * '(цель которого, как следует из названия). –