对于defonce,^:dynamic有什么用处?
查看clojure.test
源代码,我发现了以下内容:
(defonce ^:dynamic
^{:doc "True by default. If set to false, no test functions will
be created by deftest, set-test, or with-test. Use this to omit
tests when compiling or loading production code."
:added "1.1"}
*load-tests* true)
是否有任何好处或原因阻止重新定义(即使用defonce
)标记为^:dynamic
var的var?
defonce
通常不会阻止重新定义,但只有在重新加载文件时才有效。 这通常在var维护某种状态或上下文时很有用。 我相信在这里使用defonce
可能是图书馆开发的一个工具,开发人员在开发过程中需要多次重新加载文件,同时仍希望保留相同的价值。
由于var不是指向ref,而是直接var,所以使用^:dynamic
是正确的选择。 现在代码可以使用set!
或binding
以线程本地方式更改值。
上一篇: What's the use of ^:dynamic on a defonce?
下一篇: arm cortex a9 cross compiling strange floating point behaviour