评论由:jszakmeister 发表
在这里给出一个具体的案例很难——这好像只有在编译的高级阶段才会出现。我有一个从服务器返回这样的例程,类似于这个:"Br": 0, "B": 100, "P": 1000",作为 JSON。js->clj 会触发描述中提到的 "no protocol method" 错误。我发现,如果我将这个片段
`
(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 中修复了,但也许我们又遇到了其他问题,这导致我们又检测到了误报。