我经常使用以下函数
(defn set-var-root [v value]
(alter-var-root v (constantly value)))
我也在其他代码中看到这种模式很多次。如果我理解正确的话,这就像是一个习语。
为什么它不在 clojure.core 中呢?
这可能是一个不错的补充,如果不的话,为什么不是呢?
我在 clojurians slack 中询问过,并被指向了
(.bindRoot avar value)
这我之前也不知道。但同样的问题是,为什么它不是公共 API 的一部分?使用 vars 这样做有什么错误吗?
为了给出一些背景,我正在开发一个游戏引擎,在应用程序启动时,我会为输入、图形上下文等设置全局变量。
https://github.com/damn/gdl/blob/main/src/gdl/game.clj#L13
(defn- load-gdx-globals []
(set-var-root #'gdl.app/app Gdx/app)
(set-var-root #'gdl.files/files Gdx/files)
(set-var-root #'gdl.graphics/graphics Gdx/graphics)
(set-var-root #'gdl.input/input Gdx/input))