我在尝试做《Brave Clojure》第8章的练习(第3题)。我已经简化了它以找到问题所在。
考虑以下设置
(def person {:first-name "Louis"
:last-name "Bourvil"
:age 32
:city "Nantes"})
我想做到以下几点
(create-func c-age :age)
(c-age person)
我知道这个是有效的
(defmacro create-func [func-name attr] `(def ~func-name ~attr))
但我尝试使用一个函数来做,却不知道为什么这个不生效
(defmacro create-func [func-name attr] `(defn ~func-name [person] (~attr person)))
(create-func c-age :age)
; Syntax error macroexpanding clojure.core/defn at (REPL:1:1).
; user/person - failed: vector? at: [:fn-tail :arity-n :bodies :params] spec:
:clojure.core.specs.alpha/param-list
; (user/person) - failed: Extra input at: [:fn-tail :arity-1 :params] spec:
:clojure.core.specs.alpha/param-list
(从 repl 获得)
你能看出我的错误在哪里吗?