[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中的#object打印(in goog/isFunction和:else分支)不一致——那里没有空格
我引入了一个函数,它以不带空格的方式一致地处理打印对象标签。我还将写入器中的内容分解为逻辑标记,以便于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" "[" ... "]",而无需使用regexps。