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