с результатами:

начально мотивировано следующим вопросом:Сопоставленные вызовы к макросу clojurescript

Предположим, что вы хотите создать много похожих функций автоматически (т.е. без написания от руки их всех). Предположим, у нас есть некоторые уже существующие функции, и мы хотим обернуть их обработчиками для какого-либо обратного вызова:

(defn do-foo [] (println "I foo'ed"))
(defn do-bar [] (println "I bar'ed"))
(defn do-baz [] (println "I baz'ed"))

(defn manual-on-foo [] (do-foo))
(defn manual-on-bar [] (do-bar))
(defn manual-on-baz [] (do-baz))

(println "Calling manual-on-* functions")
(manual-on-foo)
(manual-on-bar)
(manual-on-baz)

с результатами:

Calling manual-on-* functions
I foo'ed
I bar'ed
I baz'ed

Мы хотим генерировать функции-оболочки автоматически, а не вручную.

Вы можете подумать, что вам нужен макрос для создания этой функции, и это одно из решений. Однако недостатком макросов является то, что они не могут быть переданы в качестве аргументов другой функции, такой какmap, Таким образом, мы могли бы написать макрос вроде:

(generate-fn :foo)  ;=> creates `on-foo` w/o hand-writing it

но следующее не получится:

(map generate-fn [:foo :bar :baz])  

Как мы можем автоматизировать генерацию этих функций?

Ответы на вопрос(1)

Ваш ответ на вопрос