我试图在不同的命名空间中定义动态var.Lobos文档指出:
默认情况下,所有迁移都保存在lobos.migrations命名空间中.它将通过迁移命令自动加载,因此无需自行加载.因此,要使用另一个名称空间,您必须更改lobos.migration/migrations-namespace动态变量.
我无法弄清楚如何在我的新命名空间中设置动态变量.
我可以在repl via(ns`lopos.migration)中执行此操作,但是从我自己的ns运行此cmd
(def ^:dynamic lobos.migration/*migrations-namespace* 'gb.install.migrations)
Run Code Online (Sandbox Code Playgroud)
收益率Can't create defs outside of current ns.
我怎样才能解决这个问题?
Cho*_*ser 19
Clojure变量可以具有对所有线程可见的根绑定.此外,动态变量也可以具有每线程绑定,每个线程仅对一个线程可见.
您可以使用以下命令临时为当前线程创建每线程绑定binding:
(binding [lobos.migration/*migrations-namespace* 'gb.install.migrations]
;; binding is in effect here in the body of the binding form
)
Run Code Online (Sandbox Code Playgroud)
或者,如果每个线程绑定已经生效,您可以使用set!以下命令更改其值:
(set! lobos.migration/*migrations-namespace* 'gb.install.migrations)
Run Code Online (Sandbox Code Playgroud)
但是,您可能需要以在所有线程中可见的方式更改此特定动态变量.如果这是真的,您需要通过执行以下操作来更改其根绑定:
(alter-var-root #'lobos.migration/*migrations-namespace*
(constantly 'gb.install.migrations))
Run Code Online (Sandbox Code Playgroud)
注意我对lobos本身一无所知,所以不能肯定地说这些中的任何一个实际上都会以lobos的方式设置var.