我一直使用以下函数很多
(defn set-var-root [v value]
(alter-var-root v (constantly value)))
我还在其他代码中看到很多这种模式。如果理解正确,这就像是一种惯用语。
为什么它不在 clojure.core 中?
这可能是一个好的补充,如果不是,为什么不是?
我在 clojurians slack 中发问,有人向我指出
(.bindRoot avar value)
这是我之前不知道的。但再次提出一个问题:为什么它不是公共 API 的一部分?使用 var 这种方式有什么问题吗?
为了提供一些背景,我正在开发一个游戏引擎,并在应用程序启动时设置输入、图形上下文等全局变量的 var。
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))