我一直使用以下函数
(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))