def
это не макрос, это особая форма.Он внедряет символ в текущее пространство имен.Вы не можете переопределить специальные формы, но даже если бы вы могли, как бы вы поступили так же?
Самый простой способ - написать макрос define
на основе def
и defn
.Если вы хотите использовать def
слово, вы можете написать обертку replace-my-def-with-normal-def
вокруг всего модуля, то есть
(replace-my-def-with-normal-def
(def x 0)
(def y (inc x))
(def z (inc y))
(def (my-func a b) (println a b))
)
, но я не уверен, что это не нарушит другие определения, которые зависят отdef
(например, defn
).