Michael O'Keefe <
[email protected]> 在邮件列表上发布了一个示例代码,该代码只有在添加了 :post 条件时才会导致编译错误。以下是稍作修改的版本
(defn g
[xs acc]
{:pre [(or (nil? xs) (sequential? xs))]
:post [(number? %)]}
(if (seq xs)
(recur (next xs) (+ (first xs) acc))
acc))
CompilerException java.lang.UnsupportedOperationException: 只能从尾部位置进行 recur
解决方法是使用一个简单地重新绑定原始参数的循环来包装主体。