У меня две основные цели:
1.) {:foo (fn ...)}
должен быть определен вне функциональной карты таким образом, чтобы вы могли обновлять :foo's (fn ...)
(возможно, ссылка, но, возможно, атом)
2.) Случаи condp: "fred", "ethel"
должны находиться в структуре, которая также может быть обновлена. Например, если я хочу добавить "lucy" (handle-lucy a b c d)
в condp, я бы хотел сделать это, используя отдельную структуру для хранения всех случаев для condp. Проблема в том, что, например, размещение их на карте или векторе означает, что переменные a b message and d
недоступны в контексте этой структуры.
Описание: Помогите мне изменить это, чтобы сделать :foo
и :bar
их собственными функциями, которые живут в #'function-map
, которые можно обновлять во время работы программы. Кроме того, помогите мне найти способ взять кейсы для condp и поместить их в собственный обновляемый контейнер.
Резюме 2: Если вы считаете, что то, о чем я прошу, является сумасшедшим, сделайте рефакторинг, как считаете нужным. В основном меня интересует повышение читабельности и доступности.
Это сокращенная версия карты функций, которую я пытаюсь изменить для рефакторинга
(def function-map
{:foo (fn [{:keys [a b message d]}]
(let [[command & args] (.split message " ")]
(condp = command
"fred" (handle-fred a b @d)
"ethel" (handle-ethel a b (first args) @d)
nil)))
:bar (fn [{:keys [a b c]}]
(do-something a b c))})