评论作出者: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))
错误消失了,但我不能确定这么做是否正确。我怀疑键又在以某种方式与已知的东西冲突,有些东西在事实上并不被视为集合时却被当作集合处理。然后,当调用(empty x)时,因为对象没有实现所需的协议,所以我们失败了。
我认为这种情况在 CLJS-1658 和 7e15b1f2b894d93ef94ff86d75226f1fd3919580 中已经被修复了,但也许我们还遇到了其他的错误,导致再次出现错误。