[CLJS-1376|
http://dev.clojure.org/jira/browse/CLJS-1376) 希望使 Clojure 1.7.0 的打印一致性。
存在两个问题
1) Atomic 和 Volatile 中的 #object 和 "[" 之间有空格,与 Clojure 1.7.0 不同
2) 在 pr-writer-impl (在 goog/isFunction 和 :else 分支中) 中的 Atom 和 Volatile 打印与 #object 打印不一致 - 我们那里没有空格
我引入了一个函数,它可以一致地处理没有空格的对象标签的打印。我还将写入器的内容分解成逻辑标记,以便更轻松地实现 cljs-devtools。
背景信息
在为 cljs-devtools 实现替代 pr-writer-impl 时,对我的精确打印行为非常重要。对于大多数情况,我调用原始的 pr-writer-impl,然后后处理其输出以增强其在 DevTools 控制台中的显示。
https://github.com/binaryage/cljs-devtools/blob/2f1c0f4095a364bb11a833e73e5753a4e48add8f/src/devtools/format.cljs#L200-L226
在构造函数或函数(goog/isFunction 和 pr-writer-impl 的 :else 分支)的情况下,我不想输出字符串化内容,但我想提供真实的 js-object 引用,并将进一步打印/展开委托给 DevTools 中的原生 JavaScript 格式化程序。
在其他情况下,例如 Atom 或 Volatile,我想轻松检测 "#object" 作为写入器中写入的第一个令牌,并提供更好的视觉提示。我发现打印 "#object [...]" 对于更复杂的数据情况令人困惑。方括号类似于向量,可能会令人混淆。相反,我将使用彩色编码或其他视觉样式来标记对象实例及其边界。但为了实现这一点,我想要一个漂亮的令牌流 "#object" "[" ... "]",而无需使用正则表达式。