使用\~I
和\~_
等在许多情况下会失败,最简单的一个例子是
Clojure 1.6.0和1.5.1
user=> (clojure.pprint/cl-format true "~I") ClassCastException java.io.PrintWriter无法转换为java.util.concurrent.Future clojure.core/deref-future (core.clj:2180) user=> (clojure.pprint/cl-format nil "~I") ClassCastException java.io.StringWriter无法转换为java.util.concurrent.Future clojure.core/deref-future (core.clj:2180) user=> (clojure.pprint/cl-format nil "~_") ClassCastException java.io.StringWriter无法转换为java.util.concurrent.Future clojure.core/deref-future (core.clj:2180)
Clojure 1.4.0
user=> (clojure.pprint/cl-format true "~I") ClassCastException java.io.OutputStreamWriter无法转换为clojure.lang.IDeref clojure.core/deref (core.clj:2080) user=> (clojure.pprint/cl-format nil "~I") ClassCastException java.io.StringWriter无法转换为clojure.lang.IDeref clojure.core/deref (core.clj:2080) user=> (clojure.pprint/cl-format nil "~_") ClassCastException java.io.StringWriter无法转换为clojure.lang.IDeref clojure.core/deref (core.clj:2080)
在其他实现中(例如clisp),这些情况都有效,即在这些简单情况下创建空输出
> (format t "~I") NIL > (format nil "~I") "" > (format nil "~_") ""