欢迎!请查看关于页面,了解更多关于此页面如何工作的信息。
启用了高级编译功能后,具有“v”键的JS对象会导致(seq? x)子句在js->clj中返回true,但由于js/Object没有满足ISeqable,下一条语句上的map会造成错误。我已经在circleci前端代码库中发现了这个问题。现在正在创建一个最小项目测试用例。
(seq? x)
js->clj
ISeqable
map
评论者:iandavis
未能生成最小案例。该问题确实在我们仓库中失败,但无法使其在更简单的案例中失败。将此问题保持开放状态,以防任何人遇到,但如果没有其他报告,不要期望有后续跟进。
由:dnolen发表的评论
我认为托马斯的分析在这里是正确的。我认为在js->clj中添加seq?和coll?检查可能不是很周到,但改变这可能为不同的用户组带来不同类型的破坏。您可以提供用于您的JS对象及其属性的externs文件(如果是动态的,这很困难)或者编写一个更简单的自定义js->clj,它只期望JS值(没有协议检查),并使用它。
seq?
coll?
好吧,我想应该是这样。我曾考虑取消前三种情况,或者只是改变js和协议检查的顺序,但我并不完全确定那可能会带来什么样的破坏。如果我们只是在我们的json解析器中使用修改后的版本,那么应该没问题,对吧?这些协议检查似乎只有在您把clojure混合在json中时才有用,对吧?