Добро пожаловать в Clojure, @xstreamer!
Я собираюсь предложить что-то отличное от того, что (именно) вы просите. Я не знаю, как запрос метаданных функции из функции должен работать, на самом деле. Поэтому я собираюсь предложить сначала определить функцию, а затем переопределить метаданные функции. Это довольно просто в Clojure.
(defn f
"Boring doc"
[])
(meta #'f)
;; => {:arglists ([]),
;; :doc "Boring doc",
;; :line 32,
;; :column 1,
;; :file "C:/Users/teodorlu/IdeaProjects/th-scratch/src/th/play/core.clj",
;; :name f,
;; :ns #object[clojure.lang.Namespace 0x3b402f0c "th.play.core"]}
Теперь переопределите его!
(alter-meta! #'f assoc :rr 5)
(meta #'f)
;; => {:arglists ([]),
;; :doc "Boring doc",
;; :line 32,
;; :column 1,
;; :file "C:/Users/teodorlu/IdeaProjects/th-scratch/src/th/play/core.clj",
;; :name f,
;; :ns #object[clojure.lang.Namespace 0x3b402f0c "th.play.core"],
;; :rr 5}
Где assoc
устанавливает значение на карте.
(assoc {} :rr 5)
;; {:rr 5}
(assoc {:some :stuff} :more :stuff)
;; {:some :stuff, :more :stuff}
Ссылки
Если вас смущает #'f
, вы получите var, представляющий привязку f , а не только значение, к которому оно относится. Для получения дополнительной информации о vars и о том, как их использовать, обратитесь к официальному справочнику по vars и менее краткому справочнику от 8th light .