更新没有破坏 goog.object
,它只是破坏了对它的“全局”访问。这意味着任何在 ns
形式中直接使用 goog.object/get
而没有适当 (:require [goog.object :as ...])
的命名空间现在会中断。你不能再依赖于全局可用的 goog
命名空间。从技术上讲,这从未成立,但可以类推依赖,因为 cljs.core
要求 goog.object
,并确保它始终加载。
所以为了正确修复这个问题,你只需要添加一个 goog.object
的 require。
然而,还有一个更微妙的问题与宏有关。某些库可能有会直接发出访问 goog.object/get
或如此的宏。即使使用该宏的命名空间做 everything properly,它现在也会中断。这是因为使用该宏的命名空间可能没有自己的 goog.object
require(也不需要它)。
不幸的是,由于那些变化,必须重写宏,以便使用它们自己的帮助函数,然后可以正确地使用 goog.object
,或者切换到使用 unchecked-get
和 unchecked-set
,它们基本上等同于 goog.object/get
和 goo.object/set
。
根据公告,添加了一个编译器选项,以使过渡更平滑。
因此,如果你的问题是自己代码中的问题,你只需要添加一个 ns require。如果是在库中的问题,需要在那里修复。或者你可以使用编译器选项 :global-goog-object&array
,直到它被修复。