【发布时间】:2014-08-12 06:50:32
【问题描述】:
我正在尝试编写一个调用某些函数的宏。这些函数只能由宏使用,所以我将它们放在一个 letfn 包装宏中。伪代码:
(letfn [(fn-a [] ...)
(fn-b [] ...)
(fn-c [] (fn-b))]
(defmacro my-macro [stuff]
`(let [whatever# (fn-a)]
(fn-c))))
对fn-a 和fn-c 的调用有效,但是当fn-c 尝试调用fn-b 我得到IllegalStateException: Attempting to call unbound fn: #'name.space/fn-b时间>。这是为什么呢?
如果我将fn-b 和fn-c 放在它们自己的defns 中,一切正常。但我不想这样做,因为它不干净。
编辑:为了测试,我尝试将函数绑定放在内部 let 中,但遇到了同样的异常。
【问题讨论】: