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