我一直在大量使用以下函数
(defn set-var-root [v value]
(alter-var-root v (constantly value)))
我在其他代码中也经常看到这种模式。如果理解正确的话,它就像是一种惯例。
为什么它不在clojure.core中呢?
这可能是一个很好的补充,如果不是,为什么呢?
我曾向clojurians slack提问,并被指出到
(.bindRoot avar value)
这是我之前不知道的。但问题再次浮现,为什么它不是公共API的一部分?使用vars这种方式有什么问题吗?
为了提供一些背景信息,我正在开发一个游戏引擎,在应用程序启动时,我会设置global 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))