评论人:jszakmeister
在这里很难给出具体的案例——看起来这只有在高级编译时才会出现。我有一个从服务器返回的例程,类似于这样:{"Br": 0, "B": 100, "P": 1000},作为JSON。js->clj会在generate "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 解决,但这可能又发生了其他事情,使我们再次得到了假阳性。