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