对于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以线程本地方式更改值。

链接地址: http://www.djcxy.com/p/64467.html

上一篇: What's the use of ^:dynamic on a defonce?

下一篇: arm cortex a9 cross compiling strange floating point behaviour