[CLJS-1376|
http://dev.clojure.org/jira/browse/CLJS-1376) 想要使打印效果与 Clojure 1.7.0 一致。
有两个问题
1) Atom 和 Volatile 在 #object 和 "[" 之间含有额外的空格(与 Clojure 1.7.0 不同)
2) Atom 和 Volatile 的打印效果在 pr-writer-impl(《goog/isFunction》和 `:else` 分支)中与 #object 打印不一致 - 我们没有空格
我引入了一个函数,用于一致地处理打印对象标签而无需空格。此外,我还将写入内容分解为写入器中的逻辑标记,以便于 clkjs-devtools 的实现。
背景信息
在实现 clkjs-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 格式化器。
在原子或 Volatile 等其他情况中,我想轻松地检测写入器中写入的第一个标记为 "#object",并提供更好的视觉线索。我发现对于更复杂的数据情况,打印 "#object [...]" 很让人困惑。方括号类似于向量,可能会造成混淆。因此,我将使用彩色编码或其他形式的视觉样式来标记对象实例及其边界。但为了做到这一点,我想有一个很好的标记流 "#object" "[" ... "]", 而不必使用正则表达式。