更新没有破坏 goog.object
,它只是打破了对其的“全局”访问。这意味着任何直接在 ns
形式中使用 goog.object/get
而没有正确 (:require [goog.object :as ...])
的命名空间现在都会出现破坏。你不能再依赖 goog
命名空间是全局可用的。从技术上讲,这从来都不是有效的,但由于 cljs.core
需要 goog.object
并保证它总是被加载,所以可以某种程度上依赖它。
因此,要正确修复这个问题,你只需要添加一个 goog.object
的引入。
然而,还有一个更微妙的问题,它与宏有关。一些库可能包含直接访问 goog.object/get
或类似的表单的宏。现在即使使用该宏的命名空间正在做所有正确的事情,也会出现破坏。这是因为它使用该宏的命名空间可能没有自己的 goog.object
引入(实际上也不需要)。
遗憾的是,由于这些变化,必须重新编写宏,或者使用自己的辅助函数来正确使用 goog.object
,或者改为使用 unchecked-get
和 unchecked-set
,这两个函数基本上等同于 goog.object/get
和 goo.object/set
。
根据公告,增加了一个编译器选项以使转换更加平滑。
因此,如果你自己的代码中存在问题,你只需要添加 ns 引入。如果问题出在库中,则需要在此处修复它。或者,你可以使用编译器选项 :global-goog-object&array
直到它被修复。