我正在使用 clojure.pprint 库中的 cl-format 函数。我按以下方式使用 ~:[ 指令
(cl-format nil "~:[~;~a~]" arg)
当 arg 为 nil 时,我得到了预期的空字符串作为返回值。然而,当 arg 为非 nil,如 1,时,我得到了错误:“格式定义参数不足。” 当我将第二个参数传递给 cl-format 函数时
(cl-format nil "~:[~;~a~]" 1 2)
它打印了 2,所以它好像是在吸收第一个参数以检查其非 nil 字符,然后将第二个参数传递给内部格式指令。
根据我对 CL Hyperspec 和 gigamonkies 格式参考的阅读,~:[] 应该不会吸收参数,而是将其传递给内部打印规范。这是 cl-format 实现中的错误,还是我对规范的误解?
我已经查看源代码,它确实看起来像是第 862 行的 https://github.com/clojure/clojure/blob/master/src/clj/clojure/pprint/cl_format.clj 中的执行子格式化的 navigator 参数应该是 arg-navigator。