评论由:jszakmeister
在这里给出一个具体的案例有点困难——这似乎只有在高级编译中才会出现。我有一个从服务器返回的示例操作尝试,如下所示:{"Br": 0, "B": 100, "P": 1000} 作为 JSON。js->clj 会遇到这个描述中提到的 "没有协议方法" 错误。我发现,如果我在这段代码之前加入下面的这段代码
`
(identical? (type x) js/Object)
(into {} (for [k (js-keys x)]
[(keyfn k) (thisfn (unchecked-get x k))]))
`
前面加入这段代码
() (coll? x) (into (empty x) (map thisfn x)))
错误消失了——但是我不确定这是否正确。我怀疑这些键再次与已知内容发生了碰撞,并且当它不是.collection的时候,某种东西被当作集合处理了。然后,当我们调用(empty x)时,由于对象没有实现所需的协议,我们失败了。
我以为这种问题以前已经被 CLJS-1658 和 7e15b1f2b894d93ef94ff86d75226f1fd3919580 解决了,但也许还有其他问题,我们又遇到了假阳性。